2012-07-12 144 views
0

在Rails中,我有一個類名User,其中我只是想看看:name, :address, :age紅寶石環路通過對象

的一些attribues我想編寫一段代碼,是這樣的:

user = User.new 
[name, address, age].zip(["Name", "Address", 10]).each do |attribute, val| 
    user.attribute = val 
end 

事情是我不知道該怎麼做,因爲user.attribute顯然不是一個有效的路線。換句話說,無論如何,user.attribute被評估爲user.name,user.address, user.age取決於循環?

謝謝

回答

5

您應該使用send方法

user.send "#{attribute}=", val 

如果屬性是,說,:name,那麼上面的行相當於

user.name = val 
+0

我會用'send'作爲最後的手段,Rails提供'write_attribute(屬性值)'。 – tokland 2012-07-12 20:14:07

+0

哦,是的,他確實提到了鐵軌。只是不在標籤:) – 2012-07-12 20:17:32

+0

再次檢查:-p。可以將'send'顯示爲基本的元編程方法,但鑑於OP正在使用rails,我們可以提及兩者(以及我的答案中的另一種方式)。 – tokland 2012-07-12 20:18:49

1

其實我可以這樣來做:

[name, address, age].zip(["Name", "Address", 10]).each do |attribute, val| 
    user[attribute] = val 
end 

這樣的作品,太

1

user.send(:name)將與調用user.name,所以你可能想嘗試。

1
user = User.new 
[name, address, age].zip(["Name", "Address", 10]).each do |attribute, val| 
    user.write_attribute(attribute, val) 
end 

但是,這就是我會寫:

user = User.new 
user.attributes = {name => "Name", address => "Address", age => 10}