在我的應用程序中,我有型號Post
& Image
。我的聯想是:Ruby on Rails - 僅在新記錄時運行after_save
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
,我想申請同一後全局設置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:我試圖找到一些關於SO的答案,但沒有任何工作!
謝謝@Vikram。是的,這可以工作,如果只想在'post'是新的時候應用它,但在我的情況下,我也希望在'post'不是新的時候應用全局設置,但添加的圖片是新的。 – Rubioli
在這種情況下,只需將相同的代碼添加到圖像模式。應用全局設置的代碼應該在image.rb 什麼說? –