2

我正在尝试让一条简单的路线正常工作

/agenda_items/5/feed

为此,我有以下路线设置

resources :agenda_items do
  member do
   get "/feed", to: "comments#feed"
  end
end

在我的每个控制器中,我都使用 CanCan 来处理身份验证并且它工作正常,但是在这个操作中我遇到了一个问题,我很确定这是由于 rails naming generation. When I runrake routes`,上面的路线是产生为

feed_agenda_item        /agenda_items/:id/feed(.:format)                     agenda_items/:id#feed

据我所知,CanCan 期望:id参数实际上是:agenda_item_id这样,因此我的父资源没有被加载。

有什么方法可以让 Rails 改变它,这样 CanCan 就可以工作,而无需我手动加载和授权资源,或者有什么方法可以让 CanCan 改变它在某些操作上寻找的内容?

4

1 回答 1

0

问题是你的路线是错误的。您尝试创建一个成员操作,agenda items为其路由到comments控制器。如果您想要从单个议程项目中获取所有评论的提要,您应该执行以下操作:

resources :agenda_items do
  resources :comments do
    collection do
      get :feed
    end
  end
end

您现在应该在运行时获得以下信息rake routes

feed_agenda_item_comments      /agenda_items/:agenda_item_id/feed(.:format)                     comments#feed
于 2013-05-09T22:37:24.687 回答