2012-03-08 74 views
0

我似乎遇到了Rails 3的一個問題,我似乎無法弄清楚。 這裏就是我想要做的事:評估字符串以修改ruby中的數據模型

att1 = "column" 
att2 = "1" 
final_column = "#{att1}_#{att2}" 

obj.final_column = 4 
    ====> Error 
    -----> NoMethodError: undefined method `final_column=' for class.... 

如果我這樣做,它的工作原理,但:

obj.column1=4 

我能做些什麼,以我的final_column,使其工作? 謝謝!

回答

2

你想這樣做:

obj.send("#{final_column}=", 4) 

如果你要尊重私有/保護visibliy,使用public_send代替send

+0

正是我在找什麼,我想避免使用點符號和這個作品。你知道有沒有什麼不好的地方? – 2012-03-08 06:24:00

+0

@MarcoA一個潛在的問題是'send'繞過'private' /'protected'可見性,所以有可能調用一種你無法做到的方法。 – 2012-03-08 06:26:36

+0

它可能會令人困惑並容易出錯。此外,您不希望使用來自瀏覽器或任何用戶輸入的字符串。就像,如果你做了「@ account.send(some_action)」,但用戶將「some_action」設置爲「銷燬」。你會遇到麻煩。 – nicholaides 2012-03-08 06:27:42