2017-02-20 6 views
0

ネストされた属性を更新した後、モデルのコールバックを実行しようとしていました。コールバック中に、新しく作成されたネストされた属性IDにアクセスできませんでした。以下のいくつかの例:Rails:ネストされた属性を更新した後でモデルコールバックを実行するにはどうすればよいですか?

モデル:

class OptionType < ActiveRecord::Base 

    has_many :option_values 
    accepts_nested_attributes_for :option_values 
    after_update :print_new_option_value 

    def print_new_option_value 

     @option_value = [] 

     option_values.each do |option_value| 
      if option_value.new_record? 
       @option_value << option_value 
      end 
     end 

     @option_value.each do |ov| 
      print "This is the new option_value name = #{ov.name}" 
      print "This the new option_value id = #{ov.id}" 
     end 
    end 
end 

class OptionValue < ActiveRecord::Base 
    belongs_to :option_type 
end 

私は新しいオプション値を持つオプションの種類(名前:新しいオプション値)を更新した後、以下のレールが見えるログ:

enter image description here

  1. メッセージには、オプションタイプの更新後に入力されたネストされた属性名が表示されます。
  2. ネストされた属性IDが空です
  3. オプションのコールバックの後にネストされた属性が更新されています。

私の質問、オプションのコールバックを呼び出す前に、ネストされた属性(オプション値)を更新するにはどうすればよいですか?理由は、私はいくつかのコードのネストされた属性IDにアクセスする必要があります。

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

答えて

0

また別の側面からこの問題にアプローチする - OptionTypeを通知しますOptionValueモデルにafter_createコールバックを追加します。おかげで、問題に対処するために意味をなす

class OptionType < ActiveRecord::Base 
    has_many :option_values 
    accepts_nested_attributes_for :option_values 

    def print_new_option_value(new_option) 
     print "This is the new option_value name = #{ov.name}" 
     print "This the new option_value id = #{ov.id}" 
    end 
end 

class OptionValue < ActiveRecord::Base 
    belongs_to :option_type 
    after_create :notify_option_type 

    def notify_option_type 
     option_type.print_new_option_value(self) 
    end 
end 
+0

! –

関連する問題