2013-05-14 51 views
1

我想創建一個簡單的方法來爲用戶初始化不同的計數器字段。但是,我不知道如何設置一個字段的值作爲一個變量。Rails:調用通用方法來編輯各種模型字段

def self.initialize(user, field) 
    counter = "#{field}".to_sym 
    user.send(counter, nil) 
    user.save   
end 

我想:

  • user.counter,而不是user.send(counter),但它與一個未定義的方法錯誤
  • user.send(counter) = nil回來了,但是這不是正確的語法

回答

0

Ruby的存取工作對於名爲name的屬性使用name=方法。

你也許可以訪問它這樣通過模型屬性界面:

user[counter] = nil 
user.save 

或者,是一個應該暴露的attr_writerattr_accessor,或等同的任何Ruby對象上工作更通用的方法:

user.send("#{counter}=", nil) 
user.save 

在處理任意方法名稱時,您只能使用send版本,就像您在此處所述。轉換to_sym並非嚴格必要。

務必要小心地列出您接受的方法調用種類。你不應該讓counter成爲一個任意的用戶參數沒有一些驗證。

相關問題