【问题标题】:Nested routes URL path and params problems in railsRails 中的嵌套路由 URL 路径和参数问题
【发布时间】:2016-04-16 11:39:33
【问题描述】:

我只是想链接到嵌套在指南中的 categories#new。我从指南显示页面链接到它

 <%= link_to "Add new category", new_guide_category_path %>

问题是我得到了错误:

没有路线匹配 {:action=>"new", :controller=>"categories", :id=>"blah"} 缺少必需的键:[:guide_id]

它使用 :id 而不是 :guide_id。我该如何解决这个问题,以便存储它使用的参数:guide_id。

或者是否有不同的方式链接到 guides/:guide_id/categories/new 页面和其他嵌套资源页面

路线:

resources :guides do
   resources :categories,     only: [:new, :create, :edit, :update]
end

仍在学习 rails,所以这可能是一个菜鸟问题,您甚至不使用链接到它的路径。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 routes


    【解决方案1】:

    例如,您有模型指南,而在您的控制器中,您有类似的变量

    @guide = Guide.where(...)
    

    鉴于您需要指定此模型的 id 并简单地执行此操作,只需将此变量传递给 url helper:

    <%= link_to "Add new category", new_guide_category_path(@guide) %>
    

    这也适用于多个嵌套资源。例如:

    路线:/foo/:foo_id/bar/:bar_id/buz/:id

    只需将所有这些模型实例传递给像这样的助手

    show_buz_bar_foo_path(@foo, @bar, @buz)
    

    Rails 会自己获取这些项目的 id。

    【讨论】:

      【解决方案2】:

      尝试这样做

      new_guide_category_path( @guide.id )
      

      form_for 帮助器可以根据提交数据对嵌套进行排序,但指向其他路径的链接是另一回事。

      【讨论】:

      • 嗯好的,所以路径主要用于表单。我收到错误未定义的局部变量或方法guide_id' with new_guide_category_path(guide_id)` 所以我猜想链接到@guide.categories.new 可能是这样吗?
      • 对不起,guide_id 是一个占位符,但您引用的变量。如果您要传递整个@guide,那么@guide.id 应该这样做
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2014-10-05
      • 2021-01-16
      相关资源
      最近更新 更多