我有一个组模型,它有很多列表。
群
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