2012-10-08 15 views
0

我的表單中有一個額外的屬性(:pagesize),它不在數據庫中。 還爲它制定者:Rails 2.通過update_attributes調用虛擬屬性的setter

def pagesize= pagesize 
    self.preferences["pagesize"] = pagesize 
end 

我想「update_attributes方法」的方法來調用制定者。 什麼是最好的類型:pagesize屬性? attr_accessor,attr_writer ...

回答

1

如果屬性未在模型中定義,你可以定義setter方法,然後做任何你想要的邏輯:

class YourModel < ActiveRecord::Base 

    attr_writer :pagesize 

    def pagesize=(val) 
    self.size_of_page = val 
    end 

end 

這樣的事情。我寫了AR版本,因爲我假定你正在使用它,但DataMapper或mongoid的原理是相同的。

+0

順便說一句,我認爲你可以不用attr_writer,只要你不想存儲的價值。 attr_writer在這種情況下提供了一個實例var @pagesize。您只能在內部使用它,並且無法從外部訪問它。但是,如果你真的需要這個變量,這纔是有價值的。否則,setter方法就足夠了。 – ChuckE

1

你可以調用attr_accessor變量的update_attributes,但它需要被定義爲可訪問的。另外,如果你把變量定義爲attr_writer,你不需要定義一個setter方法,因爲它被添加到後端。結賬Why use Ruby's attr_accessor, attr_reader and attr_writer?欲瞭解更多信息