【发布时间】:2011-08-26 02:00:01
【问题描述】:
我正在尝试向控制器添加自定义操作 ('last_five')。
我的路线被指定为:
people_last_five GET /people/last_five(.:format) {:action=>"last_five", :controller=>"people"}
(即这是 rake_routes 的输出)。
但是当我浏览到 /people/last_five 时,我收到以下错误。
于 2011 年 5 月 15 日星期日 22:03:18 +0000 开始为 XXX.XX.XXX.XXX 获取“/people/last_five” 由 PeopleController#last_five 处理为 HTML 用户负载 (1.4ms)^[[0m SELECT
users.* FROMusersWHEREusers.id= 3 LIMIT 1 86ms 完成 ActiveRecord::RecordNotFound(找不到没有 ID 的人):
我认为这是我的 routes.rb 中的问题
在我的 routes.rb 我目前有:
get 'people/last_five'
resources :people
我也试过了
resources :people do
get 'last_five', :on => collection
end
但这给出了相同的结果。
为什么当路径中没有“/:id/”时,rails 会尝试获取 ID?
当我将路线指定为 '/people/:id/last_five' 并传递一个虚拟 id 时,甚至会发生这种情况。在这种情况下,它仍然告诉我 ActiveRecord::RecordNotFound(找不到没有 ID 的人)。
即使我将操作本身简化为用于调试的存根,我也遇到了这个问题,所以我认为这不是问题所在。在我的控制器中:
# GET /people/last_five
def last_five
logger.info "LAST FIVE IS BEING CALLED"
#@people = Person.last_five
#respond_with @people do |format|
# format.json { render :json => @people }
#end
end
知道这里发生了什么吗?似乎rails被routes.rb之外的东西告知要获取ID。我到处找我能想到的地方。
非常感谢任何潜在客户。
谢谢。
编辑: 我的 PeopleController 是这样开始的:
before_filter :authenticate_user!, :except => []
filter_resource_access
respond_to :html, :js, :json
【问题讨论】:
-
您的
People控制器是否有可能在其中包含用于查找用户的前置过滤器? -
感谢您的评论 dmarkow。是的。我正在使用设计。已在上面编辑以显示过滤器。这会有所作为吗?它要求提供个人 ID。不过,我对此还是有些陌生。
-
我猜是你的 filter_resource_access。尝试将其注释掉,看看它是否有效。
-
Dmarkow,谢谢!看起来这可能是解决方案。如果我关闭之前的过滤器,它可以正常工作(当然我需要保持某种身份验证)。这里发生了什么?为什么会有影响?我会在 Devise 中挖掘一下。
-
约翰·吉布,是的。谢谢。你知道发生了什么事吗? filter_resource_access 会干扰路由吗?
标签: ruby-on-rails-3 activerecord controller routes