私のアプリケーションで私にはモデルPost
& Image
があります。私の関連付けは、次のとおりです。ユーザーが画像を追加した場合nested_forms
Ruby 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
これはうまく動作しますが、彼らはedit
post'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:私は何か答えを見つけようとしましたが、何も効果がありませんでした。
ありがとう@Vikram。うん、うまくいくのは、 'post'が新しい時だけ適用したいのですが、私の場合は、' post'が新しいものではなく、追加された画像が新しい時にグローバル設定を適用したいと思います。 – Rubioli
その場合、画像モードに同じコードを追加するだけです。グローバル設定を適用するコードはimage.rbにあるはずです 何と言いますか? –