2017-01-05 114 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

非常感谢! –