2010-09-04 66 views
0

對不起,我覺得我今天有點笨只有當它爲零時,我如何在ActiveRecord對象中設置屬性?

class Mutant < ActiveRecord::Base 
    attr_accessible :style 

    before_create :setup_values 


    private 

    def setup_values 
    style = "hardcore" unless style 
    end 
end 

我喜歡把這種東西在控制檯像

Mutant.create(:style => "rampage") # expected is Mutant.first.style == "rampage" 
Mutant.create # expected is Mutant.last.style == "hardcore but this doesn't work 

回答

0

只是覺得在API

def setup_values 
    write_attribute :style, "hardcore" if style.blank? 
end 

tadaa和它的作品:)

+0

你想使用self.style = ...這樣做只是風格= X,林心如解釋,作爲一個局部變量,而不是一個方法調用到#style =。 – 2010-09-05 14:41:53

1
  1. 首先,看這個問題:What is the best way to set default values in activerecord
  2. style = "hardcore" unless style將實例化一個名爲「風格」,而不是設置現有屬性的新變量。將其更改爲參考self像這樣:self.style = "hardcore" unless style
  3. 最後將作業寫入self.style,如下所示:self.style ||= "hardcore"這是您當前編寫的快捷方式。

我可能會寫這樣的:

class Mutant < ActiveRecord::Base 
    attr_accessible :style 
    after_initialize :setup_values 

    private 
    def setup_values 
    self.style ||= "hardcore" 
    end 
end 
相關問題