轨道 - 嵌套资源,错误的 id



我有一个组模型,它有很多列表。

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users, through: :memberships
  has_many :lists
  accepts_nested_attributes_for :lists
  cattr_accessor :current_user
end

列表

class List < ApplicationRecord
  belongs_to :group
  validates_presence_of :group_id
end

我遍历@group.lists。

  <% @group.lists.each do |elem| %>
<p><strong><%= elem.title %></strong></p>
<p><%= elem.body %></p>
<%= link_to 'Delete list', [elem.group, elem], method: :delete,
            data: {confirm: "Are you sure?"} %>
  <%= link_to 'Update list', edit_group_list_path(:group_id => @group.id, :list_id => elem.id), method: :put %>
<% end %>

删除方法效果很好,但更新方法工作错误。它不是创建像 http://localhost:3000/groups/9/lists/10/这样的链接,其中group_id是 9,list_id是 10,而是做这样的事情http://localhost:3000/groups/9/lists/9/edit?list_id=15

路线:

resources :groups do
resources :lists
end

Run

rails routes 

了解你错在哪里

无论如何,嵌套资源只需要id,所以

edit_group_list_path(:group_id => @group.id, :id => elem.id)

在查询字符串中添加任何其他参数

正如@Ursus所说,rails中嵌套资源的默认行为是接受最内层资源的纯:id参数,/groups/:group_id/lists/:id . 您也可以直接传入对象,而不是映射到 ID 整数:

edit_group_list_path(@group, elem)

您可以在此处阅读有关嵌套资源的更多信息:http://guides.rubyonrails.org/routing.html#nested-resources

相关内容

最新更新