2017-01-05 164 views
0

下面的問題是關於選擇「attr_accessor」爲對象啓用的屬性。例如:訪問attr_accessor屬性變量

class Openhour < ActiveRecord::Base 

    belongs_to :shop  
    attr_accessor :monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday 

end 

這讓我

week = Openhour.new 
week.monday = "Open" 
week.tuesday = "Closed" 

我的問題:如何通過使用一個變量從一個循環選擇attr_accessors?在下面的情況下,我會使用dayname來選擇attr_accessor

@schedules.each do |schedule| 
    %w(monday tuesday wednesday thursday friday saturday sunday).each_with_index do |dayname,dayname_index| 

     week.dayname = schedule.day == dayname_index ? "Open" : "Closed" 

    end 
end 

然而,這會導致

*** NoMethodError Exception: undefined method `dayname' for #<Model> 

提前感謝!

+0

也許使用符號的數組'[:週一,...]'然後在塊'一週.send(dayname)= ...'? –

+0

@ sagarpandya82你可以像這樣使用它'week.send(dayname)'return'String'。如果您需要修改值,您必須在發送方法'week.send(「#{dayname} =」,...)內發送它' –

回答

0

可以使用

week.send("#{dayname}=", schedule.day == dayname_index ? "Open" : "Closed") 

或者,你可以使用它像instance_variables

week.instance_variable_set("@#{dayname}", schedule.day == dayname_index ? "Open" : "Closed") 
+0

非常感謝! –