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'))
我正在尝试将以下 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'))