mysql - 在没有 Arel 的情况下如何在 Rails 中编写此查询

标签 mysql ruby-on-rails activerecord

我想实现这个:

    where(
        "(memberships.id IN (?) AND memberships.user_id == ?)
         OR (memberships.user_id == ? AND communities.hidden == ?)",
           m, user.id, nil, false)

这返回一个错误:

ActiveRecord::StatementInvalid:
       Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '= 77 OR memberships.user_id == NULL AND communities.hidden == 0)' at line 1: SELECT DISTINCT `communities`.* FROM `communities` LEFT JOIN `memberships` ON `communities`.`id` = `memberships`.`community_id` AND `memberships`.`user_id` = 77 WHERE `communities`.`deleted_at` IS NULL AND (memberships.id IN (NULL) AND memberships.user_id == 77 OR memberships.user_id == NULL AND communities.hidden == 0)

我不想使用 Arel

最佳答案

我认为问题是你使用的是双等号,而应该使用单号:

where("(memberships.id IN (?) AND memberships.user_id = ?) OR (memberships.user_id = ? AND communities.hidden = ?)", m, user.id, nil, false)

除此之外,查询对我来说看起来是有效的(我想你正在做某种 JOIN (在 之前使用 joins()includes() ) where 子句))。

关于mysql - 在没有 Arel 的情况下如何在 Rails 中编写此查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40088923/

相关文章:

mysql - laravel where 子句即使数据存在也返回 null

python - 查询python memcached数据

c# - 如何解决 C# Premature Object Dispose

ruby-on-rails - 在不同的服务器上设置数据库的IP地址

ruby-on-rails - Ruby on Rails 未初始化常量

mysql 在命令行之外转储

ruby-on-rails - Ruby on Rails 饼图库?

activerecord - 预加载相关模型(嵌套集)

ruby-on-rails - Rails ActiveRecord 按日期将结果分组为子集合

mysql - 使用 Rails 和 Ruby 确保新对象的值大于所有其他对象