0

在 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取决于循环吗?

4

4 回答 4

5

你应该使用send方法

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

如果属性是,比如说,,:name那么上面的行等价于

user.name = val
于 2012-07-12T19:20:16.580 回答
1

其实我可以这样做:

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

这种方式也行

于 2012-07-12T19:20:14.847 回答
1

user.send(:name)将与 call 相同user.name,因此您可能想尝试一下。

于 2012-07-12T19:21:43.147 回答
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}
于 2012-07-12T20:12:07.367 回答