【问题标题】:Wrong parameter passed into URL错误的参数传递到 URL
【发布时间】:2012-06-13 05:40:30
【问题描述】:

尝试链接到“user_annversary_path”,但传入的周年纪念路径不正确。user_id 正确 (2),但 id(周年纪念日)应为 1。

ActiveRecord::RecordNotFound in AnniversaryController#show

Couldn't find Anniversary with id=2
Rails.root: /Users/nelsonkeating/Desktop/ReminDeal

Application Trace | Framework Trace | Full Trace
app/controllers/anniversary_controller.rb:10:in `show'
Request

Parameters:

{"user_id"=>"2",
 "id"=>"2"}

anniversary_controller

  def show 
      @user = current_user
      @anniversary = Anniversary.find(params[:id])
    end

查看代码触发传入的参数不正确

<%= link_to "Anniversary", user_anniversary_path(@user) %>

路线

  resources :users do
      resources :anniversary
    end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 erb


    【解决方案1】:

    对于user_anniversary_path,您需要传入两个 参数:一个User 对象(或一个代表User 对象的id)和一个Anniversary 对象(或代表Anniversary 对象的id)。例如,您可以这样做:

    user_anniversary_path(User.first, Anniversary.first)
    

    或者这个:

    user_anniversary_path(1, 2)
    

    其中1User 对象的id2Anniversary 对象的id。我真的建议坚持将整个对象传递给此方法。

    当您尝试 Trent 的示例时它失败的原因是因为 @anniversary 在您调用该路由助手的操作中为零。请注意这一点。

    【讨论】:

    • @ryan-brigg 感谢您的回答,但对于我应该如何更改我的 link_to 路径仍然有点困惑......我基本上需要根据 user_id 搜索我的周年纪念表..(has_many : 周年纪念日,belongs_to : 用户关联)。
    【解决方案2】:

    周年纪念日是否嵌套在您的 routes.rb 中的用户中?如果是这样,请尝试与用户一起传递周年纪念日。

    <%= link_to "Anniversary", user_anniversary_path(@user, @anniversary) %>
    

    另外,为什么不直接从视图中传入 current_user 呢?无法访问吗?

    <%= link_to "Anniversary", user_anniversary_path(current_user, @anniversary) %>
    

    请参阅http://guides.rubyonrails.org/routing.html#nested-resources 了解更多详情。

    【讨论】:

    • 是的,@trent 它是嵌套的(我在上面添加了路由)。您的两个错误都会触发路由错误。请参阅要点gist.github.com/2922180
    • 在下面查看 Ryan 的回答。我错误地认为您正在使用具有 @anniversary 实例变量的视图。
    • 我刚刚阅读了您对 Ryan 帖子的评论。看起来您需要 user_anniversaries_path(User.first)。如果可以在视图中访问,则为 current_user。
    • 不关注.. 我需要 /users/2/anniversary/1 作为我的网址.. 第一个用户没有周年纪念日.. 第二个用户有。
    • 解决了这个问题:
    猜你喜欢
    • 2018-09-06
    • 2017-05-05
    • 2015-10-10
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2014-12-18
    • 2014-01-05
    • 1970-01-01
    相关资源
    最近更新 更多