0

私のアプリケーションには、モデルPost&がありImageます。私の協会は:

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

私はのために使用cocoon gemしますnested_forms

ユーザーが画像を追加するとき、ユーザーが追加する画像に適用できるグローバル設定がいくつかあります。

私は次のようにしてそれを行います:

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、同じ投稿グローバル設定新しいレコードにのみ適用したいと思います。

私はそれをやろうとしました:

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: SO でいくつかの答えを見つけようとしましたが、何もうまくいきませんでした!

4

2 に答える 2