Ruby on rails 如何使用可选联接检索记录?
我希望为用户检索一组时间记录。查询应返回作用域为网络的公共(即private==false)或私有(即private==true)记录,并且用户具有该时间段的插槽记录 我想用ActiveRecord实现这一点,但我找到的唯一方法是执行两个单独的查询。除了结果是一个数组而不是一个防止链接的ActiveRecord关系之外,这没什么 有什么建议吗Ruby on rails 如何使用可选联接检索记录?,ruby-on-rails,activerecord,join,Ruby On Rails,Activerecord,Join,我希望为用户检索一组时间记录。查询应返回作用域为网络的公共(即private==false)或私有(即private==true)记录,并且用户具有该时间段的插槽记录 我想用ActiveRecord实现这一点,但我找到的唯一方法是执行两个单独的查询。除了结果是一个数组而不是一个防止链接的ActiveRecord关系之外,这没什么 有什么建议吗 class TimeAccessPolicy attr_reader :network def initialize(network)
class TimeAccessPolicy
attr_reader :network
def initialize(network)
@network = network
end
def accessible_times_for(user)
return [] unless user.is_member_of?(network)
times = network.times.where(private: false)
times + network.times.joins(:slots).where(private: true, slots: {user_id: user.id})
end
end
--编辑:
上课时间
您可以使用
像这样:
times = network.times.scoped
# times is still ActiveRecord relation
if private
times = times.joins(:slots).where(private: true, slots: {user_id: user.id})
else
times = times.where(private: false)
end
此代码只执行一个查询您可以使用
像这样:
times = network.times.scoped
# times is still ActiveRecord relation
if private
times = times.joins(:slots).where(private: true, slots: {user_id: user.id})
else
times = times.where(private: false)
end
这段代码只执行一个查询如果您能再发布一点上下文,我想您需要在模型中添加一些范围。发布网络模型,解释时间从何而来,它是网络模型中的一个多关系吗?每当我听到“保留ActiveRecord关系”时,我立刻想到作用域。你能多发布一些上下文吗?我想你想给你的模型添加一些作用域。发布网络模型,解释时间从何而来,它是网络模型中的一个多关系吗?每当我听到“保存ActiveRecord关系”时,我立刻想到范围。