Rails Arel 在加入条件下加入 table

Rails Arel joins with where condition on joined table

我正在尝试将以下 Rails where 子句转换为使用 Arel,主要是为了利用 Arel 提供的 or 方法。

Post 型号

class Post
  belongs_to :user
end

用户模型

class User
  has_many :posts
end

我正在寻找 Mark 发布的帖子。

这是 Rails 查询:

Post.joins(:user).where(users: { first_name: 'Mark' })

我需要用 Arel 转换这个查询。

提前致谢!

这应该可以做到。

# Generate Arel tables for both
posts = Arel::Table.new(:posts)
users = Arel::Table.new(:users)

# Make a join and add a where clause
posts.join(:users).on(posts[:user_id].eq(users[:id])).where(users[:first_name].eq('Mark'))

如果你只需要 Arel 用于 where 部分(而不是用于连接),我认为这将是一个更好的解决方案(将使用 Activerecord 结果):

Post.joins(:user).where(User.arel_table[:first_name].eq('Mark'))