1

当我尝试这个时,连接器模型没有被保存(假设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,以及角色记录 whereuser_id=current_user.idaccount_id: @account.id. 只有@account 被保存。角色模型中没有记录。使用控制台的结果是一致的。

在操作中替换current_user.accounts.build为,加入者(角色记录)模型被保存。出于这个原因,我不认为这是一个验证问题。我正在使用 Rails 3.2.3。current_user.accounts.createcreate

楷模:

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 %>
4

2 回答 2

1

尝试使用

更新:

class User < ActiveRecord::Base
  has_many :roles
  has_many :accounts, through: :roles, :autosave => true
end

您可以在此处找到有关自动保存的更多信息

User或在模型中使用回调

after_save :save_accounts, :if => lambda { |u| u.accounts } 

def save_accounts 
  self.accounts.save
end
于 2012-05-04T18:02:28.163 回答
0

这是一个错误:https ://github.com/rails/rails/issues/6161#issuecomment-5631018

于 2012-05-18T17:53:16.157 回答