【问题标题】:How to execute Model Method name in where query?如何在 where 查询中执行模型方法名称?
【发布时间】:2017-03-24 13:56:34
【问题描述】:

我有包含first_namelast_name 的用户表。在我的用户索引页面上,有一个用于 first_namelast_name 搜索的文本字段。

如果我使用first_namelast_name 进行搜索,它可以正常工作。但是如果我在文本字段中输入全名,那么它不会给我任何结果

我的User 模特

def fullname
  first_name + last_name
end

我的查询

User.where("lower(first_name) like ? or lower(last_name) like ?", "%#{params[:fullname].downcase}%", "%#{params[:fullname].downcase}%")

【问题讨论】:

    标签: ruby-on-rails ruby postgresql ruby-on-rails-4


    【解决方案1】:

    搜索时连接两个名字:

    User.where(
      "(LOWER(first_name) || ' ' || LOWER(last_name)) LIKE ?",
      "%#{params[:fullname].downcase}%"
    )
    

    【讨论】:

    • 谢谢。您的答案有效,但仍有任何方法可以使用模型方法名称进行搜索?
    • @RoRDeveloper,没有。除非有人实现了一个可以像 SQL 一样有效地加载和执行随机 Ruby 代码的数据库。
    • @RoRDeveloper,您可以将所有用户加载到内存中并在每个单独的用户上调用该方法,但如果您的应用程序要被多个用户用于生产,您不应该这样做.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多