2009-07-29 2 views
1

Я пытаюсь использовать Rails Atom Feed Helper для создания фида для вложенного ресурса. Мой шаблон представления (index.atom.builder) является:Вложенный ресурс с помощью помощника Atom Feed

atom_feed(:schema_date => @favourites.first.created_at) do |feed| 
    feed.title("Favourites for #{@user.login}") 

    feed.updated(@favourites.first.created_at) 

    @favourites.each do |favourite| 
    feed.entry(favourite, :url => favourite.asset.external_ref) do |entry| 
     entry.title(favourite.asset.external_ref) 
     entry.content(image_tag(favourite.asset.location), :type => 'html') 
     entry.author do |author| 
     author.name(@user.login) 
     end 
    end 
    end 
end 

И у меня есть следующие маршруты:

map.namespace :public do |pub| 
    pub.resources :users, :has_many => [ :favourites ] 
    pub.resources :favourites 
    pub.resources :assets, :only => [ :show ] 
    end 

К сожалению, URL не в состоянии генерировать для feed.entry линии:

feed.entry(favourite, :url => favourite.asset.external_ref) do |entry| 

Ошибка "undefined method` favourite_url "для ActionView :: Base".

Я попытался изменить feed.entry строку:

feed.entry([:public, favourite], :url => favourite.asset.external_ref) do |entry| 

Но это возвращает запись для массива, а не любимой! У кого-то была аналогичная проблема here also.

Я знаю, что, добавив строку:

map.resource :favourites 

к моему routes.rb бы «исправить» эту проблему, но этот ресурс доступен только вложенными под/общественное пространство имен.

У кого-нибудь была эта проблема раньше?

Приветствия Arfon

ответ

1

Вы используете favourite.asset.external_ref как заголовок записи, которая оставляет меня верить URL для этой записи, вероятно, должен быть определен как:

public_user_favourite_url(:id => favourite, :user_id => @user) 

Что, если favorite.id = 9 и @user.id = 1, будет генерировать:

http://localhost:3000/public/users/1/favourites/9 

это то, что вы ищете?

+0

Эй, спасибо, это сработало! Я не уверен, как я пропустил этот вариант :-) – arfon

3

Просто для наблюдения. Основываясь на предложении Майкла, я передаю полный URL-адрес и, похоже, генерирует правильный URL-адрес для линии feed.entry.

@favourites.each do |favourite| 
    feed.entry(favourite, :url => public_user_favourite_url(:id => favourite, :user_id => @user)) do |entry| 
     entry.title(favourite.asset.external_ref) 
     entry.content(image_tag(favourite.asset.location), :type => 'html') 
     entry.author do |author| 
     author.name(@user.zooniverse_user_id) 
     end 
    end 
    end 
Смежные вопросы