2016-12-19 86 views
0

我有一個簡單的Item模型和「/ items」以及「/items.json」工作。不過,我想在API調用中添加一個搜索參數,如「/items.json?skuid=123」,並且json返回的將只包含skuid = 123的項目。Rails應用程序 - 如何在API獲取請求中添加查詢參數?

我嘗試以下方法:

class ItemsController < ApplicationController 
    before_action :set_item, only: [:show, :edit, :update, :destroy] 

    # GET /items 
    # GET /items.json 
    def index 
    Rails.logger.debug("index.params=#{params}") 
    @items = Item.all(params.slice(*Item.attribute_names)) 
    end 

但得到的錯誤

錯誤的參數數目(1給出,預計0)

請指點。

+1

我認爲你必須首先檢查'skuid'參數是prasent還是不是你可以使用活動記錄'where'caluse這樣'Item.where(「skuid =?」,params [:skuid])' – uzaif

+0

謝謝。部分成功。 「/items.json?skuid=123」的作品感謝您的建議。我收到了skuid爲「123」的項目,但現在「/items.json」返回了空json。它早些時候用來返回數據庫中的所有項目。你能建議嗎? – Pushkar

+0

使用if block來處理搜索項目,並且你已經完成 – uzaif

回答

2

我會重構你的代碼範圍。

在你Item型號:

class Item < ActiveRecord::Base 
    scope :by_sku_id, -> (sku_id) { where(sku_id: sku_id) if sku_id.present? } 
end 
Item控制器

然後:

def index 
    @items = Item.by_sku_id(params[:sku_id]) 
end 

這緩解了,如果你的參數控制器內設置或不令人擔憂的問題;整體簡化了控制器代碼。您也可以鏈接這些範圍並保持您的API靈活。

+0

這個工程!我必須閱讀範圍,以瞭解你在那裏做了什麼。它的優雅。謝謝! – Pushkar

相關問題