1

空白で区切られた配列を反復処理しようとしています。

diff_attr = []

%w[name hours].each do |a|
  if @old_place.a != new_place[a.to_sym]
    diff_attr << a
  end
end

2つの異なるオブジェクトの属性(名前と時間)を比較したいと思います。現在、未定義のメソッド「a」エラーが発生しています。現在、aは変数ではなく、@old_placeのメソッドとして評価されています。

比較するために、ブロック内のイテレータを評価するにはどうすればよいですか?

@old.place.name != new_place[:name]

それ以外の

@old.place.a != new_place[:a]

4

2 に答える 2

3

まあ、あなたがやっているようにそれを行うことができますnew_place(両方が ActiveRecord オブジェクトであると仮定します):

if @old_place[a] != new_place[a]

または、次を使用しますObject#send

if @old_place.send(a) != new_place.send(a)
于 2012-10-12T21:46:39.223 に答える
1

別のオプションは、単に恐れずにRubyでevalを使用することです。

diff_attr = []

%w[name hours].each do |a|
  if eval("@old_place.#{a}") != new_place[a.to_sym]
    diff_attr << a
  end
end
于 2012-10-12T21:51:02.847 に答える