2

それぞれを個別に入力せずにリストしたい、非常によく似た多くのプロパティを持つ User モデルがあります。

したがって、ではなく:

"eye color: #{@user.his_eye_color}"
"hair color: #{@user.his_hair_color}"
"height: #{@user.his_height}"
"weight: #{@user.his_weight}"
...

"eye color: #{@user.her_eye_color}"
"hair color: #{@user.her_hair_color}"
"height: #{@user.her_height}"
"weight: #{@user.her_weight}"
...

ブロックか何かをしたいのですが (Proc? Lambda? それらが何であるかはまだわかりません...)

['eye color','hair color','height','weight',...].do |stat|
   "#{stat}: #{@user.her_(stat.underscore)}"
end

['eye color','hair color','height','weight',...].do |stat|
   "#{stat}: #{@user.his_(stat.underscore)}"
end

上に書いたことが神秘的で、魔法的で、完全に間違って@user.his_(stat.underscore)いることはわかっていますが (その部分)、どうすればよいでしょうか? 基本的にモデルの属性を動的に呼び出す必要がありますが、これを行う方法がわかりません...

どんな助けでも本当に感謝します!

4

2 に答える 2

5
['eye color','hair color','height','weight',...].do |stat|
   "#{stat}: #{ @user.send(:"her_#{stat.tr(" ","_")}") }"
end

['eye color','hair color','height','weight',...].do |stat|
   "#{stat}: #{ @user.send(:"his_#{stat.tr(" ","_")}") }"
end

これは機能するはずです。いつでもsendオブジェクトのメソッドを呼び出し、そのメソッド名を文字列としてその場で生成するために使用できます

于 2010-02-11T16:10:06.993 に答える
2

Rails で ActiveRecord を使用している場合は、Object#[] メソッドを使用して属性の値を動的に取得することもできます

['eye color','hair color','height','weight',...].do |stat|
   "#{stat}: #{ @user[ "her_#{ stat.underscore }"]}"
end
于 2010-02-11T16:14:18.637 に答える