在Rails中,我有一个班级名称User
,我只想看看:name, :address, :age
我想写一段类似的代码:
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
取决于循环吗?
谢谢
答案 0 :(得分:5)
您应该使用send
方法
user.send "#{attribute}=", val
如果属性是,例如:name
,则上面的行等同于
user.name = val
答案 1 :(得分:1)
其实我可以这样做:
[name, address, age].zip(["Name", "Address", 10]).each do |attribute, val|
user[attribute] = val
end
这种方式也有效
答案 2 :(得分:1)
user.send(:name)
与调用user.name
相同,所以您可能想尝试一下。
答案 3 :(得分: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}