试图找出 setter 不起作用的原因:
class Company < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships, dependent: :destroy
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :company
validates_presence_of :user
validates_presence_of :company
end
class User < ActiveRecord::Base
has_many :memberships
has_many :companies, :through => :memberships, dependent: :destroy
accepts_nested_attributes_for :companies
end
<%= form_for(@user) do |f| %>
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.fields_for :company do |ff|%>
<%= ff.label :name %><br>
<%= ff.text_field :name %>
<% end %>
</div>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:name, companies_attributes:[:name])
end
当我这样做时它就起作用了:
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:name, company:[:name])
end
所以对我来说还不太清楚,因为文档说 setter company_attributes在accepts_nested_attributes_for :companies时被删除
最佳答案
当将 fields_for
与 accepts_nested_attributes_for
一起使用时,它们需要匹配。请参阅http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for
您有 accepts_nested_attributes_for :company
但 f.fields_for :company
因此断开连接。
所以尝试更改您的表单以包含
<div class="field">
<%= f.fields_for :companies do |ff|%>
<%= ff.label :name %><br>
<%= ff.text_field :name %>
<% end %>
</div>
你的 user_params 方法是
def user_params
params.require(:user).permit(:name, companies_attributes:[:name])
end
这应该会导致它们填充在 companies_attributes
下,并且您原来的 user_params
方法可以正常工作。因为 fields_for
应该生成 user[companies_attributes[id][name]]
因为 user has_many Companies
(您是否希望在要创建的列表?)
关于ruby-on-rails - 强参数 has_many 通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27706759/