Ruby on rails 在rails中创建相互依赖的关联模型-最佳实践

Ruby on rails 在rails中创建相互依赖的关联模型-最佳实践,ruby-on-rails,Ruby On Rails,创建关联模型的最佳实践是什么?例如,如果其中一个验证失败(比如C),我不想保存任何内容。此外,如果有,显示每个模型的错误 class A has_many :B has_many :C end class B end class C end class AController def create afields = params[:a_params] bfields = params[:b_params] cfields = params[:c_param

创建关联模型的最佳实践是什么?例如,如果其中一个验证失败(比如C),我不想保存任何内容。此外,如果有,显示每个模型的错误

class A
 has_many :B
 has_many :C
end

class B
end

class C
end

class AController
  def create
    afields = params[:a_params]
    bfields = params[:b_params]
    cfields = params[:c_params]

    a = A.new(a_params)

    if a.save
      B.create(bfields)
      C.create(cfields)
      redirect_to a_index
    else
      redirect_to a_new_path
    end   

  end
end

基本上,我想创建许多相互依赖的模型,并希望保存所有模型,或者在单个验证失败时不保存任何模型。我可以用某种方式来做,但我想知道最好的方法。

您可以使用ActiveRecord验证的方法来达到您的目的:

class A < ActiveRecord::Base
 has_many :B
 has_many :C

 validates_associated :B, :C
end
这样,它将确保在创建
B
的记录或
C
的记录之前,关联的
A
存在


但是要小心,不能在两个关联中使用
验证关联的
有很多
属于
),因为这会导致无限递归。

可以做的一件事是使用rails,并使用bang!保存的版本/创造

ActiveRecord::Base.transaction do
  A.create!(aparams)
  B.create!(bparams)
  C.create!(cparams)
end

你能解释一下你到底想要什么吗?详细说明a位的要求当您在
a
模型中有
validates_关联的:B,:C
时,那么,
a.save
将失败,除非其关联的B和C记录有效。谢谢我正在寻找类似的东西,您可能应该在其中添加一个rescue。。。这就是使用create的bang方法的全部要点。
ActiveRecord::Base.transaction do
  A.create!(aparams)
  B.create!(bparams)
  C.create!(cparams)
end