好的,这是一个有趣的。关系类似于:
{"fields": [
Client
has_many
和state_changes
StateChange
一个belongs_to
。
我有这个查询:
Client
问题是这会返回Client.find_by_sql('SELECT * FROM clients cs WHERE NOT EXISTS (SELECT * FROM state_changes WHERE state_changes.client_id = cs.id AND current = true)')
个对象而不是ActiveRecord Array
。我需要对该查询中返回的Relation
的{{1}}运行更新。
因此,本质上存在两个问题,将结果作为ActiveRecord关系,然后获取所有state_changes
,也作为ActiveRecord关系,以便我可以运行更新。
我也明白,这可能是一种令人费解的方式......
答案 0 :(得分:1)
我也明白,这可能是一种令人费解的方式......
拥有简单的AR界面 - 确实令人费解:)
我可能会选择一些scope
:
class StateChange
scope :active, -> { where.not(current: false) }
# I believe with your setup it is not equal to `where(current: true)`
end
class Client
scope :some_smart_name, -> { includes(:state_changes).merge(StateChange.active) }
end
这应该会让那些没有关联state_changes
且current
设置为false
的客户退回给您。