nested_attributes首先保存父级

时间:2016-06-05 05:46:40

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

我有2个型号。 UserCompany

公司

class Company < ActiveRecord::Base

  has_many :users, dependent: :destroy

  validates :name, 
    presence: true,
    uniqueness: true

  accepts_nested_attributes_for :users
end

用户

class User < ActiveRecord::Base
  belongs_to :company

  validates :name,
    presence: true

  validates :company,
    presence: true

end

我得到了哈希:

{:name=>"My Company", :users_attributes=>[{:name=>"My User"}]}

现在我运行以下内容:

params = {:name=>"My Company", :users_attributes=>[{:name=>"My User"}]}
company = Company.new params
company.save 

这种行为是我所期待的。 company无法保存,因为User无效(验证:validates :company, presence: true

为此,我每次都使用一个关注类来执行以下操作:

  • 创建公司
  • 为该公司创建用户

所以我的问题是:

是否可以首先保存父级,并且在有效时将子级保存为第二部分,而不使用关注类?对于这种情况确实存在类似“accepts_nested_attributes_and_save_first_parent_for”的rails方式吗?

1 个答案:

答案 0 :(得分:0)

你可以试试以下:

class Company < ActiveRecord::Base

  has_many :users, dependent: :destroy, :inverse_of => :company
  ...
end

参见:

  1. How can you validate the presence of a belongs to association with Rails?
  2. Rails: Validating association after save?