我有一个Group模型,它有很多列表。
组
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
答案 0 :(得分:1)
运行
rails routes
了解你的错误
无论如何,嵌套资源只需要id
,所以
edit_group_list_path(:group_id => @group.id, :id => elem.id)
查询字符串中添加了任何其他参数
答案 1 :(得分:1)
正如@Ursus所说,rails中嵌套资源的默认行为是接受最内层资源:id
的普通/groups/:group_id/lists/:id
参数。您也可以直接传递对象,而不是映射到ID整数:
edit_group_list_path(@group, elem)
您可以在此处详细了解嵌套资源:http://guides.rubyonrails.org/routing.html#nested-resources