Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用可选联接检索记录?_Ruby On Rails_Activerecord_Join - Fatal编程技术网

Ruby on rails 如何使用可选联接检索记录?

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)

我希望为用户检索一组时间记录。查询应返回作用域为网络的公共(即private==false)或私有(即private==true)记录,并且用户具有该时间段的插槽记录

我想用ActiveRecord实现这一点,但我找到的唯一方法是执行两个单独的查询。除了结果是一个数组而不是一个防止链接的ActiveRecord关系之外,这没什么

有什么建议吗

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关系”时,我立刻想到范围。