Rails - nestes资源,ID错误

时间:2018-01-23 23:57:18

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

我有一个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

2 个答案:

答案 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