考慮以下幾點:Rails和Arel的功能:我可以調用對象而不是調用數據庫嗎?
budget
在其another_collection
有很多object
秒。obj
在其another_collection
中有許多與object
相同類型的對象。budget
和some_collection
已在之前保存在數據庫中並具有主鍵設置的以下循環 之前聲明。some_collection
是obj
s的集合。
-
some_collection.each do |obj|
another_obj = obj.another_collection.build
budget.another_collection << another_obj
end
budget.another_collection.collect {|another_obj| another_obj.another_obj_id}
=> [1, 2, 3, 4]
some_obj_with_pk_1 = some_collection.where(obj_id: obj.id)
some_obj_with_pl_1.id
=> 1
budget.another_collection.where(another_obj_id: some_obj_with_pk_1.id)
=> []
這是不應該發生的。正在發生的事情是,rails會使用another_obj_id = 1在another_collection
中查詢數據庫中的任何項目。由於此集合尚未保存到數據庫中,因此這些項目都不會顯示在結果中。
是否有一個函數或東西,我可以傳遞給Arel的where
方法,說使用本地結果只有?我知道我可以迭代這些項目並找到它,但如果我不必這樣做,並且只使用一種方法就可以了。
不,您不能,而且這是預期的行爲。您正在構建針對數據庫運行的查詢。除了查詢數據庫並從那裏返回結果之外,爲什麼還會執行其他任何操作? –
我從來沒有說過這是一個錯誤,我在這裏的假設是它**是預期的行爲。我問Arel是否支持我正在做的事情,如果沒有,在rails框架中有沒有一種方法可以完成我所要求的功能。 – DJTripleThreat
你有點早些時候自己回答你的問題。如果您想從未保存的集合中找到內容,則需要根據您的條件迭代和過濾該集合。你不能用Arel查詢它。 –