在rails中设置嵌套参数值before_validation

时间:2015-04-29 09:52:11

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

我有一个模型Request和嵌套模型fill_cartridges。



has_many :filled_cartridges, inverse_of: :request, dependent: :destroy
accepts_nested_attributes_for :filled_cartridges, reject_if: proc { |attributes| attributes['title'].blank? },allow_destroy: true




我的强烈指责:



def request_params
 params.require(:request).permit(:name,:type,
  :filled_cartridges_attributes => [:client_id,:cartridge_name,:cartridge_id,
:request_id,:_destroy,:id],

end




使用此方法我相信我的嵌套模型在保存父(请求)模型时是自动保存的。 可能有很多fill_cartridges。

我想要做的是设置client_id和cartridge_id before_validation,如果我不知道他们将在非null约束中失败。我相信before_validation在每个对象验证之前调用一些方法。所以我相信before_validation会在验证所有嵌套对象之前调用我的方法。

这就是我尝试使用before_validation的方式:



before_validation :set_attributes, only: [:create]
....

protected
  def set_attributes
	@client = Client.where("name = ?", self.name).take # this is  a problematic
	@cartridge = Cartridge.where('cartridge_name=?', self[:filled_cartridges_attributes][:cartridge_name].take # this is too
	self.client_id = @client.id
	self.cartrdige_id = @cartridge.id
end




在set_attributes的前两行中,我想首先找到我的客户端和盒式磁带对象。为此,我想使用strong_params中的值。 我怎么能这样做?

0 个答案:

没有答案