我正在尝试遍历由空格分隔的数组:
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]
答案 0 :(得分:3)
好吧,你可以像new_place
那样做(假设两者都是ActiveRecord对象):
if @old_place[a] != new_place[a]
或者,使用Object#send
:
if @old_place.send(a) != new_place.send(a)
答案 1 :(得分: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