Ruby on rails 在rails中创建相互依赖的关联模型-最佳实践
创建关联模型的最佳实践是什么?例如,如果其中一个验证失败(比如C),我不想保存任何内容。此外,如果有,显示每个模型的错误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
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