如何在Rails 4中使用lower和associations进行查询?

3

我有一个关联,我想通过关联字段的值来查询。例如:“获取所有Role.name为'admin'的关联”。我还想将Role.name的值转换为小写。

该项的关系是has_many:roles,而另一侧是belongs_to。这是我的代码:

  • 可行,但不转换为小写:.where("roles.name":"Admin")
  • 错误,即使不转换为小写也会出错:.where("roles.name = ?","Admin")生成的SQL是WHERE (roles.name = 'admin')
  • 失败,没有错误或转换为小写:.where('"roles.name" = ?',"Admin")生成的SQL是WHERE ("roles.name" = 'admin')

我真正想要的是能够说.where('lower("roles.name") = ?',"Admin"),但我该怎么做呢?

错误通常是SQLException: no such column: roles.name

如请求所示,schema.rb

  create_table "roles", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  add_index "roles", ["name"], name: "index_roles_on_name", unique: true

请提供 schema.rb 的部分,其中包含 roles 表。 - Pavel Tkackenko
1个回答

2

如果您只想使用角色模型进行工作,请尝试:

where('lower(name) = ?', 'admin')

如果您想从另一个模型(例如User)进行操作,请在User模型中尝试以下代码:
User.joins(:roles).where('lower(roles.name) = ?', 'admin')

是的,我正在从另一个模型中进行操作,但 where('lower(roles.name) = ?','admin') 返回了一个 SQL 错误。 - deitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接