2012-10-12 63 views
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]

回答

3

好了,你可以做你喜歡」重新做爲new_place(假設都是ActiveRecord對象):

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

或者,使用Object#send

if @old_place.send(a) != new_place.send(a) 
+0

由於布里克。我也想到了這一點。一旦Stackoverflow允許我將選中你的答案。 – Huy

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 
相關問題