2015-02-10 92 views
0

說一個User有很多Photos。我想每一個名字像photo如此:如何在關聯保存之前保存關聯信息?

def safe_name 
    self.name = "#{user.code}#{user.photos.count + 1}" 
end 

而當聯想保存驗證此名稱。我可以在after_save中調用該方法,並使其正常工作,但照片的名稱不應該是空白的。如何在保存照片之前抓住它,使其有效?

回答

0

可以使用before_validation回調

+0

問題是我無法在'photo'保存之前訪問'user'作爲名稱中的關係。 – 2015-02-10 02:59:55

+1

你可以,你只是這樣做: @photo = user.photos.create(你的屬性在這裏) 這樣你將有照片實例中的user_id。您在驗證之前在照片模型中運行回調,然後驗證以檢查名稱是否正確 – 2015-02-10 03:01:24

+0

這並不壞,但我寧願將邏輯置於控制器外面。似乎它不能做模型方面雖然?我已經通過了所有我的測試,目前爲止還有一個臨時名稱,一旦保存了'photo',它就會重命名。 – 2015-02-10 03:09:00

0

如果您需要操作數據,然後驗證它,您可以使用活動記錄回調before_validation。這將修改名稱,然後調用你的驗證器。

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

+0

問題是'photo'保存之前,我不能訪問'user'作爲名稱的關係。 – 2015-02-10 03:01:20