0

在rails中保存/更新時,如果在before_save回調中滿足條件,是否可以跳過/忽略列?Rails跳過保存/更新不同語言環境中的某些列

一樣,比如我有一個產品表,它有兩列:

  • 名稱:字符串
  • 價格:整數

ProductTranslations

  • name_翻譯:字符串
  • 的product_id:整數
  • 區域:字符串

是否有可能有一個before_save回調是這樣的:

class Products < ActiveRecord::Base 
    has_many :translations 
    before_save :check_locale 

private 
    def check_locale 
    if I18n.locale != :en 
     # save/update only the price column and don't update name column 
     # find ProductTranslation record of product name and update it 
    else 
     # save/update both the price price column and product name 
    end 
    end 
end 

將代碼什麼不顧更新名稱列?

此外,我不打算爲postgres使用像hstore_translations這樣的gem,因爲我希望將代碼創建爲模型的一部分(如果可能的話),以便以後參考。謝謝。

回答

1
class Products < ActiveRecord::Base 
    has_many :translations 
    before_update :check_locale 

private 
    def check_locale 
    if I18n.locale != :en 
     translations.find_by_local(I18n.locale).update name_translation: name 
     write_attribute :name, name_was 
     #by owerriding wirte attribute name with name_was(rails cool 
     #thing to get property value that was there before 
     #the new one the one you are sending) 
    else 
     # save/update both the price price column and product name 
    end 
    end 
end 
+0

感謝這非常有用。雖然我不確定,但我認爲這將導致一個問題,如果有一個唯一性驗證名稱列 編輯:沒關係,我只是測試它,它保存 –

+0

是的人,它對我工作正常。謝謝@sedad! –

相關問題