使用变量访问 attr_accessor 个属性

Accessing attr_accessor attributes with variable

下面的问题是关于 selecting 由 "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"

我的问题:如何使用循环中的变量 select attr_accessors?在下面的情况下,我会使用 dayname 到 select 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>

提前致谢!

你可以使用

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

或者您可以像 instance_variables

那样使用它
week.instance_variable_set("@#{dayname}", schedule.day == dayname_index ? "Open" : "Closed")