我正在尝试使用Rails Atom Feed Helper为嵌套资源生成Feed。我的视图模板(index.atom.builder)是:
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|
错误是“ActionView :: Base的未定义方法`favourite_url”。
我已尝试将feed.entry行更改为:
feed.entry([:public, favourite], :url => favourite.asset.external_ref) do |entry|
但是这会返回数组的条目而不是最喜欢的条目!有人有类似的问题here also。
我知道添加一行:
map.resource :favourites
到我的routes.rb会'修复'这个问题,但是这个资源只能嵌套在/ public命名空间下面。
以前有没有人遇到这个问题?
干杯 Arfon
答案 0 :(得分:2)
只是为了跟进。基于Michael的建议我传递了完整的url param,这似乎为feed.entry行生成了正确的url。
@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
答案 1 :(得分:1)
您使用favourite.asset.external_ref
作为条目的标题,这使我相信该条目的网址可能应定义为:
public_user_favourite_url(:id => favourite, :user_id => @user)
如果favorite.id = 9
和@user.id = 1
生成:
http://localhost:3000/public/users/1/favourites/9
这是你在找什么?