2015-08-15 46 views
1

我有一個模型MyModel,屬性爲idname。通常情況下,我可以創建一個使用一個新的記錄質量指派忽略散列中的未定義屬性

my_model = MyModel.new(name: 'Bob') 

有一些方法,以便它忽略了實際上並不在該模型中存在的哈希的屬性,我可以創建一個模型?像這樣:

my_model = MyModel.new(name: 'Bob', something_not_defined: 'Some string') 

在這個例子中,我並不關心質量指派的安全性。該模型提供了一個散列,可以包含大量我不關心的隨機值,但它仍包含很多映射到模型屬性的值。

回答

1

您可以覆蓋您的模型的initialize方法,以放棄任何您想要的屬性。

class MyModel < ActiveRecord::Base 
    def initialize(attributes = {}) 
    attributes = attributes.slice(:name) 
    super attributes 
    end 
end 

這種方法可以有意想不到的效果,因爲Rails會不會在各種場合呼籲initialize,所以我最好定義一個.build方法在你的模型的邏輯和用它來代替.new初始化您的模型:

class MyModel < ActiveRecord::Base 
    def self.build(attributes = {}) 
    attributes = attributes.slice(:name) 
    new attributes 
    end 
end 

,然後用它是這樣的:

MyModel.build(name: 'Bob', something_not_defined: 'Some string')