Rails5のAPIモードでAPIをつくってみる(1)のつづき
検索機能つけてみる。
アクションを作る。
# GET /items/search def search @items = Item.search(item_params) render json: @items end
下記の詳細は、ここに書いてあった。
# Only allow a trusted parameter "white list" through.
def item_params
params.require(:item).permit(:name, :price)
end
ルーティング設定する。ルーティングの説明は、ここに超詳しく書いてある。便利だなあ。cakephpより分かりやすい。コントローラのフォルダわけとかもcakephpよりやりやすいと思った。あと、パス作成も簡単でいい。
Rails.application.routes.draw do get '/items/search', to: 'items#search' resources :items end
モデルにsearch関数を書く。 modelクラスの中でのselfの使い方 Active Record クエリインターフェイス
def self.search(data) name = data[:name].nil? ? '' : data[:name] items = self.where('name like ?', '%' + name + '%') items = items.where('price = ?', data[:price]) if data[:price].present? return items end
これでとりあえずできた。sqlの見方調べよう。development.logに出力されてた。
SELECT "items".* FROM "items" WHERE (name like '%app%') AND (price = '500')
1回のセレクト文になってるから大丈夫っぽい。