我有一個Company
模型和一個Employer
模型。 Employer
belongs_to :company
和Company
has_many :employers
。在我的Employer
模型,我有以下驗證:ActiveRecord驗證包含在列表中 - 列表未在創建新關聯模型後更新
validates :company_id, inclusion: {in: Company.pluck(:id).prepend(nil)}
我運行到哪裏上述驗證失敗的問題。這裏是一個控制器動作設置示例將導致驗證失敗:
company = Company.new(company_params)
# company_params contains nested attributes for employers
company.employers.each do |employer|
employer.password = SecureRandom.hex
end
company.employers.first.role = 'Admin' if client.employers.count == 1
company.save!
admin = company.employers.where(role: 'Admin').order(created_at: :asc).last
admin.update(some_attr: 'some_val')
在示例代碼段的最後一行,admin.update
將失敗,因爲驗證檢查,看看是否company_id
包括在清單,它不是,因爲清單是在company
保存之前生成的。
顯然有一些解決方法,比如抓取我想知道的是如果有更好的方法來解決這個問題。company.id
的值,然後用它來定義admin
,但這看起來像是一個迂迴的解決方案。
更新
顯然,可能的解決辦法,我建議甚至不工作。
new_company = Company.find(company.id)
admin = new_company.employers.where(role: 'Admin').order(created_at: :asc).last
admin.update
# Fails validation as before
我試過你的建議,但它不起作用。當我調用'new_company.save'或'new_company.update(params)'時,我得到'錯誤的參數數量(1代表0)'。我現在只是禁用了驗證。似乎創造了比解決問題更多的問題。 – ACIDSTEALTH
當您遇到錯誤時,請始終添加完整的堆棧跟蹤! – phoet