【问题标题】:Rails 3.1 custom controller action keeps asking for ID even when route is specified即使指定了路由,Rails 3.1 自定义控制器操作也会不断询问 ID
【发布时间】: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.* FROM users WHERE users.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


【解决方案1】:

根据对您问题的讨论,原因是之前/周围过滤器干扰,而不是您的具体操作存在问题。您的应用程序正在搜索User,因此它可能与身份验证相关。

【讨论】:

    【解决方案2】:

    您确定这是在 Control 中,而不是在 Model 中吗? Rails 不希望在 Control 中使用 Model 的东西。

    【讨论】:

    • 我很确定它在 Control 中。这是给用户的路由信息​​。据我了解 MVC 这是控制器的角色。如果有人能解释为什么这不应该进入控制器,我很高兴得到纠正。
    猜你喜欢
    • 2023-03-31
    • 2012-06-19
    • 2011-12-03
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多