1

我正在尝试遍历由空格分隔的数组:

diff_attr = []

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

我想比较两个不同对象的属性(名称和小时数)。现在,我收到一个未定义的方法“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 回答