1

我有一种关系,餐馆可以通过称为动作的中间表有许多用户,并且用户通过动作也有许多餐馆。Rails 3有许多通过查询所有父母记录,并且只包含符合条件的孩子

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

餐厅型号:

has_many :actions 
has_many :users, through: :actions 

操作模式:

belongs_to :user 
belongs_to :restaurant 

用户模型:

has_many :actions 
has_many :restaurants, through: :actions 

回答

0

你需要为这种情况做的是使用左外连接。如果你只需要创建一个联接查找用户喜欢的特定属性:

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 ") 
+0

您的回答只解决了我的问题的一部分。该查询返回满足用户搜索条件的用户餐馆以及没有任何用户的餐馆。但是,它不会返回不符合搜索条件的用户。我需要它返回所有餐馆,无论他们是否有匹配的用户,以及他们是否没有用户;同时只包括符合搜索条件的用户。请让我知道你是否需要更多的澄清。 – user2737876

+0

如果你想让用户返回不符合查询条件的餐厅,那么为什么要添加它们?你能给我一个你想要查询返回的具体例子吗? – jvans

+0

我不知道我是否可以用它来比任何更好/不同于我原来的问题。 “我试图查询所有餐馆,只包括满足特定条件的用户;无论用户是否符合搜索条件,或者根本没有用户关联,都应该返回餐馆。” – user2737876

相关问题