Ruby on rails 在select之后使用where search子句

Ruby on rails 在select之后使用where search子句,ruby-on-rails,Ruby On Rails,我是rails新手,我正在为现有的应用程序添加一些更新。我需要添加搜索词过滤,我正试图使用where和ILIKE来实现这一点,但由于原始代码是编写的。原始代码使用Model.select获取记录,当我尝试使用ILIKE子句将where链接到该位置时,它仍然返回未过滤的整个数组 date_format = get_js_date_format_by_id(@account.date_format_id) sort_format = "#{params[:sort_item] || "dat

我是rails新手,我正在为现有的应用程序添加一些更新。我需要添加搜索词过滤,我正试图使用where和ILIKE来实现这一点,但由于原始代码是编写的。原始代码使用Model.select获取记录,当我尝试使用ILIKE子句将where链接到该位置时,它仍然返回未过滤的整个数组

  date_format = get_js_date_format_by_id(@account.date_format_id)
  sort_format = "#{params[:sort_item] || "date"} #{params[:sort_order] || "asc"}"

  @expenses = Expense.select("expenses.*, to_char(expenses.date, '#{date_format}') as formatted_date,
      to_char(
        CASE
          WHEN expense_categories.is_calculated = true then expenses.amount * expense_categories.unit_cost
          ELSE expenses.amount
        END, 'FM999999990.00') as total,
        CASE
        WHEN expense_categories.is_calculated = true then expense_categories.unit_name
          ELSE null
          END as unit_name,
        '' as images_list,
       users.name as user_name, expense_categories.name as category_name, projects.name as project_name, clients.name as client_name")
       .joins(:user, :project, :expense_category, :client)

  if params[:query]
    @expenses.includes(:user).where('users.name ILIKE :query', { query: "%#{params[:query]}%"}).references(:users)
  end
  @expenses.where(conditions)
  .order(sort_format)

  if params[:page]
    @expenses = @expenses.page(params[:page]).per(params[:per_page])
  end


  @expenses
我从if params[:query]开始添加过滤部分,其余部分是原始代码。如能提供任何帮助,将不胜感激。
谢谢

问题在于您没有使用以下内容修改当前@expenses范围:

if参数[:查询] @费用。包括:user.where'users.name ILIKE:query',{query:%{params[:query]}%}。引用:users 终止 此行返回所需的新作用域,但不将其保存在任何位置。以下代码应该可以工作:

if参数[:查询] @expenses=@expenses.includes:user.where'users.name ILIKE:query',{query:%%{params[:query]}%}。引用:users 终止
注意:同样的情况也适用于params[:query]条件下的排序。

Hi@edariedl谢谢您的回答。我修改了代码,正如你所说,我得到了这个错误,这是来自序列化程序,因为我们将formatted_date属性发送回用户,并且在我更改代码后找不到它,因为你建议formatted_date来自原始问题中附加的select语句。你能看看日志吗,生成的SQL是如何生成的看起来像?抱歉@edariedl,我错过了这方面的通知。下面是生成的SQL