2017-05-15 120 views
0

在我的應用程序中,我有型號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 gemnested_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 

這工作得很好,但現在我想它,如果他們想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/createedit/update動作)

我也試過用:

after_save :global_settings, if: new_record? 

這給了我錯誤:undefined method 'new_record?' for Post

如何我只能將我的全球設置所有新記錄/新形象

ps:我試圖找到一些關於SO的答案,但沒有任何工作!

回答

0

由於images沒有這些全局設置意味着你只能只images執行function不都fields

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 什麼說? –