2017-01-05 12 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)'のように 'String'を返すことはできません。値を変更する必要がある場合は、sendメソッド '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

大変ありがとうございます! –

関連する問題