ほげほげパッチ

有る事無い事 徒然なるままに

検索機能

任意のルーティング設定法

  • collectionmember
    • いよいよ自分で好きにルーティング。
      • コレクションは、"集める"だけ = idなし
      • メンバーは、"個人を認識"する = idあり
    • resources内に入れ子にしないとつかえないっぽい
       └親要素に対してアクションを追加するから?
  resources :tweets do
    collection do
      get 'search'
    end
  end


検索メソッド

  • ビジネスブロック = テーブルに対する処理
  • ビジネスブロックは、必ずモデル内に

  • whereメソッド = 完全一致検索

モデル.where('検索対象となるカラムを含む条件式')

#Hogeモデル内でidが3未満のデータ
Hoge.where('id < 3')
  • LIKE句 = 曖昧検索
# %は文字数任意
where('title LIKE(?)', "h%") => house, hp, とか

# _は1文字
where('title LIKE(?)', "g_") => go, gu, とか

 └エクセルで出てくるワイルドカード('*'と'?')に近い。

手順

  • 検索フォーム追加
    form.text_field :keyword,

  • searchアクションをルーティング

  resources :tweets do
    collection do
      get 'search'
    end
  end
  • データ処理のメソッドをモデル内に定義。
  def self.search(search)
    if search != ""
      Tweet.where('text LIKE(?)', "%#{search}%")
    else
      Tweet.all
    end
  end
  • コントローラー内で、フォームから来た:keywordとモデルで定義したメソッドをくっつける。
  def search
    @tweets = Tweet.search(params[:keyword])
  end
  • search結果のビューを作る

要点

  • 任意のルーティングcollection
    collection do
      get 'search'
    end
  • 曖昧検索 whereとlike
Tweet.where('text LIKE(?)', "%#{search}%")