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.addressuser.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)を呼び出すのと同じな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 に答える