考虑以下几点: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查询它。 –