【问题标题】:Rails search users by first_name inside full_nameRails 通过 full_name 中的 first_name 搜索用户
【发布时间】:2018-03-05 05:35:53
【问题描述】:

我有User 具有full_name 属性的模型。我希望用户只按他们的名字或姓氏进行搜索。 我试过了

User.where("username= :username OR full_name LIKE :full_name", username: "rony", full_name: "rony")

但问题是,当我使用这个唯一查询进行搜索时,full_name 将始终返回 nill,因为此查询仅在 full_name 中搜索确切的“rony”而不是例如“rony sianturi”,您在执行此查询时还有其他建议吗.谢谢。

我搜索过类似的问题,但所有其他问题都是这个问题的反面。所以没有运气

谢谢。

【问题讨论】:

    标签: ruby-on-rails postgresql sqlite


    【解决方案1】:

    尝试使用带有通配符的like

    User.where("username = ? OR full_name like ?", "rony", "%rony%")
    

    【讨论】:

    • 错误ActiveRecord::StatementInvalid: SQLite3::SQLException: near "ilike": syntax error: SELECT "users".* FROM "users" WHERE (username = 'rony' OR full_name ilike '%rony%') LIMIT ?
    • @chronycles 您正在尝试从 sqlite 而不是 postgres 检索记录,请检查我更新的答案,但这是区分大小写的。如果您需要检查full_name 不区分大小写,请检查此stackoverflow.com/questions/15480319/…
    • 我得到了这个错误,因为'rony'字符串在一个变量中,如何删除字符(“”)? ActiveRecord::StatementInvalid: SQLite3::SQLException: near "%": syntax error: SELECT "users".* FROM "users" WHERE (username= 'rony' OR full_name= %'rony'%) LIMIT ?
    • 不用担心,它现在可以工作了。只是语法问题。谢谢楼主
    【解决方案2】:

    您可以使用Arel 构建查询。例如这里的搜索查询就像

    User.where(
      User.arel_table[:name].eq("#{key_word}").
        or(
          User.arel_table[:name].lower.matches("%#{key_word.downcase}%")
        )
    )
    

    请查看Arel documentation 了解更多详情和高级查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 2015-09-15
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      相关资源
      最近更新 更多