1

我在这里阅读了有关在处理初始化值时正确初始化 ActiveRecord 模型的不同方法的问题,并且始终与提供默认值有关。我遇到的一个很好的答案有助于阐明不同的方式。

但是,如果不赞成重写 ActiveRecord 基本初始化方法,那么当您想像在标准 Ruby 类initialize(arg1, arg2...)方法中那样使用值进行初始化时,向 ActiveRecord 模型提供参数的正确方法是什么。

这样你就可以

obj = MyObject.new(Obj1, some_num)

我遇到的唯一一件事实际上是覆盖该方法,但在初始化时首先initialize调用。super然而,这是不赞成的,因为 ActiveRecord 的基类allocate在分配的情况下使用实例化 AR 对象,因此最终可能会回避整个初始化方法。

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

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

有人可以帮助指导我吗?

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

4

1 回答 1

-1

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

例如:

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

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

于 2013-03-22T12:04:46.617 回答