2017-03-27 31 views
0

我想通過客戶端的名稱做一個Ajax搜索查詢,所以我使用了一個類似的子句(see this question)。我正在考慮使用索引操作來響應來自clients_controller的json格式,但我已經使用它來響應html格式,並同時爲我列出的行分頁will_paginatewill_paginate-bootstrapRails 5最好的控制器動作寫一個類似的查詢

什麼是最好的方法?製作一種新的方法來響應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 
+0

我覺得這兩種方式都很好,但如果是我,我會創建一個'search'方法。 – xuanduc987

回答

1

在我看來,你應該讓你的唯一行動index,只是堆積在你的@client變量的作用域。

請記住,只有在變量上執行像each這樣的數組方法時,纔會將您的SQL查詢發送到數據庫,而不是之前。 所以,你可以寫類似:

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 
+0

非常感謝您的工作。 – Cloud1988

0

您應該創建像searchsearch_by_client_name一些卓有成效的名字一個新的動作。它也會解決你的問題,你會堅持軌道寧靜的路由。

如果你想索引操作同時服務請求,那麼你可以做這樣的事情:

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 
相關問題