2013-03-22 119 views
1

我已经阅读了关于在处理初始化值时始终正确初始化ActiveRecord模型的不同方法的问题,并且始终与提供默认值有关。我遇到过很棒的answer有助于澄清不同的方式。但是,如果您不赞成使用ActiveRecord基础初始化方法,那么当您想使用值初始化时,如何在标准Ruby类initialize(arg1, arg2...)方法中为参数提供ActiveRecord模型的正确方法是什么。如何在Rails中初始化ActiveRecord模型时提供参数

这样你就可以

obj = MyObject.new(Obj1, some_num) 

我所遇到的实际overrideing的initialize方法,但调用super首先在初始化的唯一的事。然而,这是因为ActiveRecord的基类在所有情况下使用allocate来实例化一个AR对象,因此可能最终会避开整个initialize方法。

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

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

有人可以帮助指导我吗?

额外的问题 如果有一个接受的方式做以上,似乎有需要与值初始化对象时要考虑的另一个领域,那就是当对象是从数据库被检索初始化。没有正确处理初始化值可能会覆盖从数据库中检索的内容(或者在将属性设置为默认值时,我已经阅读过)。所以如果需要妥善处理,我们该怎么做?

回答

-1

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

例如:

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

其中params是新对象中的值的散列。

+1

理查德布朗谢谢 - 但这也允许@book = Book.new这就是我正在试图弄清楚如何不发生没有提出错误 - 这是我的问题是关于。 – pghtech 2013-03-22 12:32:49