我有一個類Prediction
,其中belongs_to
或者currency
或market
。Rails - 無法驗證至少有一個字段爲空
belongs_to :market
belongs_to :currency
validate :market_xor_currency?, on: [:new, :create, :edit, :update]
def market_xor_currency?
if(self.market != nil && self.currency != nil)
false
end
true
end
我以這種方式使用RSpec測試:
p1 = FactoryGirl.create(:prediction)
p1.currency = FactoryGirl.create(:currency)
expect{ p1.market = FactoryGirl.create(:market) }.to raise_error
然而,測試失敗。我如何使Prediction
屬於currency
或market
?
謝謝你告訴我關於多態關係。我改變了代碼,但現在我在其他一些測試中得到這個錯誤: 'PG :: UndefinedColumn:ERROR:列predictions.predictable_type不存在 LINE 1:... ns「WHERE」predictions「。」predictable_id「= $ 1 AND「預測... ^ :選擇」預測「。*從」預測「WHERE」預測「。」predictable_id「= $ 1 AND」預測「。」predictable_type「= $ 2 LIMIT 1' – octavian
是設置它你需要2個字段,predictable_type和predictable_id,你需要創建一個遷移來添加這兩個字段,而不是market_id和currency_id –
檢查我的答案中的鏈接,你會發現詳細信息 –