0

私のアプリケーションで私にはモデルPost & Imageがあります。私の関連付けは、次のとおりです。ユーザーが画像を追加した場合nested_formsRuby on Rails - 新しいレコードがある場合にのみafter_saveを実行

ため、私はcocoon gemを使用

class Post < ActiveRecord::Base 
    has_many :images 
    accepts_nested_attributes_for :images, reject_if: :image_rejectable?, allow_destroy: true 

class Image < ActiveRecord::Base 
    belongs_to :post 

、私は、そのユーザは、彼らが追加されている画像に適用することができます一部グローバル設定を持っています。

私がやってそれを実行します。

class Post < ActiveRecord::Base 
    has_many :images 
    accepts_nested_attributes_for :images, reject_if: :image_rejectable?, allow_destroy: true 

    after_create :global_settings 

    private 

    def global_settings 
     self.images.each { |image| image.update_attributes(
          to_what: self.to_what, 
          added_to: self.added_to, 
          ) 
         } 
    end 

これはうまく動作しますが、彼らはeditpost's imagesにしたい場合は、私は同じポストグローバル設定ONLYを適用するので、今、私はそれをしたいです新しいレコード

は私がやってそれを実行しようとしました:

class Post < ActiveRecord::Base 
    has_many :images 
    accepts_nested_attributes_for :images, reject_if: :image_rejectable?, allow_destroy: true 

    after_save :global_settings 

    private 

    def global_settings 
    if new_record? 
     self.images.each { |image| image.update_attributes(
      to_what: self.to_what, 
      added_to: self.added_to, 
    ) 
     } 
    end 
    end 

これで働いていなかったすべての& グローバル設定は、任意のレコード(もnew/createまたはedit/update行動上の)に追加されませんでした。

私もしてみました:

after_save :global_settings, if: new_record? 

これは私にエラーを与えた:undefined method 'new_record?' for Post

は、どのように私はすべての新しいレコード/新しい画像のための私のグローバル設定のみを適用することができますか?

ps:私は何か答えを見つけようとしましたが、何も効果がありませんでした。

答えて

0

imagesは、これらのグローバル設定はありませんのでは、あなただけのすべてのfieldsを持っていないだけでimagesfunctionを実行できることを意味します。

def global_settings 
    self.images.each { |image| 
    if image.to_what.blank? 
     image.update_attributes(
      to_what: self.to_what, 
      added_to: self.added_to 
    ) 
    end 
    } 
end 
0

これはあなたのために働くかもしれません。

def global_settings 
# if new_record? # Change this to 
    if self.new_record? 
    self.images.each { |image| image.update_attributes(
     to_what: self.to_what, 
     added_to: self.added_to, 
) 
    } 
end 
+0

ありがとう@Vikram。うん、うまくいくのは、 'post'が新しい時だけ適用したいのですが、私の場合は、' post'が新しいものではなく、追加された画像が新しい時にグローバル設定を適用したいと思います。 – Rubioli

+0

その場合、画像モードに同じコードを追加するだけです。グローバル設定を適用するコードはimage.rbにあるはずです 何と言いますか? –

関連する問題