【问题标题】:Rails 5 best controller action to write a like queryRails 5 编写类似查询的最佳控制器操作
【发布时间】:2017-08-19 19:39:04
【问题描述】:

我想通过客户名称进行 ajax 搜索查询,所以我使用了 like 子句 (see this question)。我正在考虑使用 index 操作来响应 clients_controller 的 json 格式,但我已经在使用它来响应 html 格式,同时使用 will_paginate 和 will_paginate 对列出的行进行分页-引导。

最好的方法是什么?制作一种新方法来响应 json 格式或者我应该使用带有格式的索引吗?以及如何做到这一点?

我是 ruby​​ on rails 的新手

clients_controller.rb

def index
  respond_to do |format|
    format.html
    {
       #something like this I know that I would return me a syntax error
       @client = Client.paginate(:page => params[:page])
    }
    format.json
    {
       #something like this I know that I would return me a syntax error
       @client = Client.where("client_name LIKE ? ", "%#{params[:client_name]}%"  )
    }
  end
end

def other_method
  @client = Client.where("client_name LIKE ? ", "%#{params[:client_name]}%"  )
  respond_to do |format|
    format.json {...}
  end
end

【问题讨论】:

  • 我认为这两种方式都很好,但如果是我,我会创建一个search 方法。

标签: ruby-on-rails json ruby


【解决方案1】:

在我看来,您应该只保留您的 index 操作,并在您的 @client 变量上累积范围。

请记住,您的 SQL 查询仅在对变量执行 each 之类的数组方法时才会发送到数据库,而不是之前。 所以你可以这样写:

def index
  @client = Client.all
  if params[:client_name].present?
    @client = @client.where("client_name LIKE ? ", "%#{params[:client_name]}%")
  else
    @client = @client.paginate(page: params[:page])
  end

  respond_to do |format|
    format.html
    format.json
  end
end

【讨论】:

    【解决方案2】:

    您应该使用一些富有成效的名称创建一个新操作,例如 search 或 search_by_client_name 。它也将解决您的问题,并且您将坚持使用 rails restful 路由。

    如果您希望索引操作同时满足这两个请求,那么您可以执行以下操作:

    def index
      @client = Client.paginate(:page => params[:page])
      respond_to do |format|
        format.html
        format.json do
          client = Client.where("client_name LIKE ? ", "%#{params[:client_name]}%"
          render json: { client: client }
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多