为什么Rails不会保存木匠模型?正常行为或错误?

时间:2012-05-04 17:19:49

标签: ruby-on-rails activerecord has-many-through

当我尝试这个时,没有保存木匠模型(假设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.idaccount_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 %>

2 个答案:

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