1

我有一个关系,餐厅可以通过称为操作的中间表拥有许多用户,并且用户也可以通过操作拥有许多餐厅。

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

餐厅型号:

has_many :actions
has_many :users, through: :actions

动作模型:

belongs_to :user
belongs_to :restaurant

用户模型:

has_many :actions
has_many :restaurants, through: :actions
4

1 回答 1

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 ")
于 2013-09-01T20:16:55.957 回答