edo1z blog

プログラミングなどに関するブログです

Rails5のAPIモードでAPIをつくってみる(2)

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回のセレクト文になってるから大丈夫っぽい。