如何在Rails中初始化ActiveRecord模型时提供参数

时间:2013-03-22 11:58:54

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

我在这里已经阅读了有关在处理初始化值时正确初始化ActiveRecord模型的不同方法的所有问题,并且始终与提供默认值有关。我遇到的一个伟大的answer帮助澄清了不同的方式。

但是,如果不赞成覆盖ActiveRecord基本初始化方法,那么当您想要像在标准Ruby类initialize(arg1, arg2...)中那样初始化值时,为ActiveRecord模型提供参数的正确方法是什么?方法

所以你可以

obj = MyObject.new(Obj1, some_num)

我遇到的唯一事实是覆盖initialize方法,但在初始化时首先调用super。但是,由于ActiveRecord的基类在所有情况下都使用allocate来实例化AR对象,因此最终可能会绕过整个初始化方法。

那么,也许还有另一个根本原因,我没有找到提供初始值作为RoR的标准做法?

我知道我可以在对象中使用验证来验证在没有满足要求的情况下无法保存对象,例如设置了所有正确的属性。但是我正在接近这个特定的对象,因此在初始化开始时不会在没有必需属性的情况下创建它(因为在初始化时我们将拥有所有这些信息,如果从DB中检索我们将拥有所有这些值)。

有人可以帮我指点吗?

额外问题 如果有一种可接受的方法来执行上述操作,则在使用值初始化对象时,似乎还需要考虑另一个区域,即从数据库中检索对象时初始化对象。不正确处理初始化值可能会覆盖从DB检索到的内容(或者我在读取与将属性设置为默认值相关时读取的内容)。因此,如果需要妥善处理,我们该怎么做?

1 个答案:

答案 0 :(得分:-1)

初始化ActiveRecord对象时,可以提供值的哈希值。这在控制器的create操作中用于根据new操作中收集的数据创建新对象。

例如:

def create
  @book = Book.new(params[:book])

其中params是新对象值的哈希值。