返回与表单上的输入不同的对象

时间:2014-03-01 21:51:14

标签: ruby-on-rails database activerecord ruby-on-rails-4 callback

这更像是一个概念证明而不是其他任何东西。我有一个“服装”的模型。每件服装都有与之关联的数据,包括名为cid的标识符。请注意,这与rails自动创建的id无关。

这个想法是,如果有人试图使用正在使用的cid来制作服装,他们将会找回已经拥有cid的服装。用例是如果他们填写的唯一字段是cid,则rails可以完成其余的工作。

请注意,我不想在控制器中调用另一个方法。当我在新的服装表单上点击创建时,我希望这种情况发生。

我想使用before_save回调来完成此操作以及类似find_or_initialize_by

的内容
class Costume < ActiveRecord::Base
  before_save :get_costumes

  def get_costumes
    Costume.find_or_initialize_by(cid: self.cid)
  end
end

谢谢!

1 个答案:

答案 0 :(得分:1)

为什么不这样做。

 def self.get_costume(cid) // notice singularity 
   Costume.find_or_create_by_cid(cid)
 end

在任何控制器中,如customs_controller.rb

  Costume.get_costume(122)