Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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
Sql Rails 3有许多贯穿所有父记录的查询,并且只包含满足条件的子记录_Sql_Ruby On Rails_Ruby On Rails 3_Activerecord_Eager Loading - Fatal编程技术网

Sql Rails 3有许多贯穿所有父记录的查询,并且只包含满足条件的子记录

Sql Rails 3有许多贯穿所有父记录的查询,并且只包含满足条件的子记录,sql,ruby-on-rails,ruby-on-rails-3,activerecord,eager-loading,Sql,Ruby On Rails,Ruby On Rails 3,Activerecord,Eager Loading,我有一种关系,餐馆可以通过一个叫做actions的中间表拥有许多用户,而用户也可以通过actions拥有许多餐馆 我试图查询所有餐馆,只包括满足某些条件的用户;无论是否没有符合搜索条件的用户,或者是否没有与之关联的用户,都应返回餐厅。我的模型如下 餐厅模式: has_many :actions has_many :users, through: :actions 行动模式: belongs_to :user belongs_to :restaurant 用户模型: has_many :act

我有一种关系,餐馆可以通过一个叫做actions的中间表拥有许多用户,而用户也可以通过actions拥有许多餐馆

我试图查询所有餐馆,只包括满足某些条件的用户;无论是否没有符合搜索条件的用户,或者是否没有与之关联的用户,都应返回餐厅。我的模型如下

餐厅模式:

has_many :actions
has_many :users, through: :actions
行动模式:

belongs_to :user
belongs_to :restaurant
用户模型:

has_many :actions
has_many :restaurants, through: :actions

对于这种情况,您需要做的是使用左外连接。如果只是创建联接以查找具有特定属性的用户,如:

   Restaurant.joins(:users).where("users.name LIKE 'user_name'")
隐式创建了一个内部联接,它将排除所有没有用户的餐厅。要包含它们,请执行以下操作:

Restaurant.joins(["LEFT OUTER JOIN actions on restaurants.id = actions.user_id", "LEFT OUTER JOIN users on users.id = actions.user_id"]).where("users.name LIKE 'James' OR users.name IS NULL ")

你的回答只解决了我问题的一部分。该查询将返回用户符合用户搜索条件的餐馆,以及没有任何用户的餐馆。但是,如果餐馆的用户不符合搜索条件,则不会返回。我需要它返回所有餐馆,不管他们是否有匹配的用户,或者他们是否没有用户;而仅包括符合搜索条件的用户。如果您需要更多说明,请告诉我。如果您希望返回不符合查询条件的用户的餐厅,那么为什么要添加这些用户?你能给我一个具体的例子说明你希望查询返回什么吗?我不确定我是否能把它表达得比我原来的问题更好/不同。“我正在尝试查询所有餐厅,只包括满足某些条件的用户;无论是否没有符合搜索条件的用户,或者是否没有与之关联的用户,都应返回该餐厅。”您的声明“仅包括满足某些条件的用户;如果没有符合搜索条件的用户,则应返回餐厅“是相互排斥的。给我举个例子,说你想要什么/不想要什么。请让我知道这是否足够具体。假设我要返回所有餐馆,并包括与该餐馆关联的年龄在20到30岁之间的所有用户(年龄是用户模型上的一个属性)。正如我之前所说的,如果没有用户符合与餐厅相关的条件,那么该餐厅仍然应该被退回。