2013-03-28 65 views
0

我想建立一個配置文件對象,像這樣:軌道 - 無法建立與上傳文件中的記錄

@user.profiles.build(params[:profile]) 

構建時被調用,它運行驗證了Profile但時有發生的問題上傳的圖片及其包含的時間params[:profile]

當存在圖像並且構建被調用時,驗證將運行並且由於user_id未傳遞到proc中,因此無法找到用戶。但是,如果params[:profile]中沒有圖像,則傳入user_id並找到用戶。

我的模型:

class User < ActiveRecord::Base 
    attr_accessor :require_profile_name 
    has_may :profiles 
end 

class Profile < ActiveRecord::Base 
    attr_accessor :name, :image 
    belongs_to :user 
    validates :name, if: Proc.new { |profile| profile.user.require_profile_name } 
end 

我發現沒人帶環視谷歌同樣的問題,所以我在哪裏開始的損失。

感謝您的任何幫助。

+0

只是一個更正。當你調用'build'時,還沒有執行驗證。驗證只在調用'save','create'或'update_attributes'時運行(我可能缺少一些其他方法) – jvnill

+0

你說得對,但是當調用build時,我得到了'undefined方法require_profile_name for nil:NilClass'。當然不是'保存'。 – thogg4

回答

0

爲您的個人資料類,你需要確保用戶設置你首先檢查名稱

class Profile < ActiveRecord::Base 
    attr_accessor :name, :image 
    belongs_to :user 
    validates :user, presence: true 
    validates :name, presence: true, if: proc { |profile| profile.user.try(:require_profile_name) } 
end 

這樣,記錄不會被保存的驗證之前,如果用戶沒有設置。如果用戶已設置且需要配置文件名稱,則當名稱爲空時,驗證也會失敗。

+0

我明白你在說什麼,但問題是用戶從未設置配置文件params中有文件,原因不明。 – thogg4

+0

沒有其他建議?我仍然被這個難住。 – thogg4