2017-04-19 59 views
1

在Rails 5,由於這兩款車型:添加爲一個關係,使關係減排失敗

class Solution < ApplicationRecord 
    has_many :tasks, -> { order(name: :asc) } 
end 

class Task < ApplicationRecord 
    belongs_to :solution 
end 

該代碼將失敗,並ActiveRecord::RecordInvalid: Validation failed: Tasks is invalid

solution = Solution.new(name: "My Solution", tasks: [ 
    Task.new(name: "My Task") 
]) 

solution.save! 

這是由於任務的solutionnil

(byebug) pp solution.tasks[0].errors.messages 
{:solution=>["must exist"]} 

但是,當刪除t他下令從has_many條款(逼到has_many :tasks),它工作正常:

(byebug) pp solution.tasks[0].solution == nil 
false 

這個預期?

示例項目(看最後兩次提交):https://github.com/hannesstruss/test_order_validation

回答

0

使用inverse_of修復它:

has_many :tasks, -> { order(name: :asc) }, inverse_of: :solution 

belongs_to :problem, inverse_of: :tasks