sql - Rails - PostgreSQL bool where 语句,错误 : operator does not exist: boolean = integer

标签 sql ruby-on-rails ruby postgresql

我有一个包含 bool 属性的模型,Member 可以是 admin。当我创建一个新的 Team 时,我想为创建该 TeamMember 将此值设置为 true。当我使用 SQLite 时,它运行良好。导致错误的行如下所示:

def set_admin
  if self.members.admins.any? == false
    self.members.first.update_attributes admin: true
  end
end

我的查询 (members.admins) 看起来像这样:

has_many :admins, -> { where("admin = 1") }, through: :members, source: :user

注意 我也试过:

has_many :admins, -> { where(admin = true) }, through: :members, source: :user

但是我得到了同样的错误:

完整的错误信息如下所示:

PG::UndefinedFunction: ERROR: operator does not exist: boolean = integer LINE 1: ...s"WHERE "members"."team_id"= $1 AND "members"."admin"= 1 ^提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。:SELECT COUNT(*) FROM "members"WHERE "members"."team_id"= $1 AND "members"."管理员"= 1

而且我不确定如何解决它。有什么想法吗?

最佳答案

恕我直言,它只是:

# in team.rb
has_many :admins, -> { where(admin: true) }, through: :members, source: :user
# or if you use postgresql's boolean datatype
has_many :admins, -> { where('admin = \'t\'') }, through: :members, source: :user

def set_admin
  members.first.update_attributes(admin: true) if admins.none?
end

关于sql - Rails - PostgreSQL bool where 语句,错误 : operator does not exist: boolean = integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838224/

相关文章:

javascript - 我如何允许rails有javascript : in the data

mysql - 在 ruby​​ 中运行 rake import 任务时内存不足

ruby - 为什么要从 gemspec 文件中排除测试?

sql - 删除命名空间中的所有函数? (执行生成的 DDL 命令?)

mysql - 将多个表与主表连接起来

java - (JDK 1.6 和 ojdbc6.jar)与(JDK 1.5 和 ojdbc14.jar)

sql - 定义复合主键的最佳方式

ruby-on-rails - 向 Spree 添加新的 ActiveMerchant Gateway (Elavon)

ruby-on-rails - 在 Rails : generate user_root_path 中设计 gem

ruby - Ruby 中的括号和 if 语句