当我尝试这个时,没有保存木匠模型(假设Account has_many :users, through: :roles
,反之亦然):
def new
@account = current_user.accounts.build
end
def create
@account = current_user.accounts.build(params[:account])
@account.save # does not save the joiner model
end
这应创建@account,以及user_id=current_user.id
和account_id: @account.id
的角色记录。只有@account被保存。角色模型中没有记录。使用控制台结果是一致的。
在current_user.accounts.build
操作中将current_user.accounts.create
替换为create
,保存加入者(角色记录)模型。出于这个原因,我不认为这是一个验证问题。我正在使用Rails 3.2.3。
class User < ActiveRecord::Base
has_many :roles
has_many :accounts, through: :roles
end
class Account < ActiveRecord::Base
has_many :roles
has_many :users, through: :roles
accepts_nested_attributes_for :users
end
class Role < ActiveRecord::Base
attr_accessible
belongs_to :users
belongs_to :accounts
end
<%= simple_form_for(@account) do |f| %>
<%= render 'account_fields', f: f %>
<%= f.submit %>
<% end %>
答案 0 :(得分:1)
尝试使用
<强>更新:强>
class User < ActiveRecord::Base
has_many :roles
has_many :accounts, through: :roles, :autosave => true
end
You can find more info about autosave here
或在User
模型中使用回调
after_save :save_accounts, :if => lambda { |u| u.accounts }
def save_accounts
self.accounts.save
end
答案 1 :(得分:0)