検索機能
任意のルーティング設定法
collection
とmember
- いよいよ自分で好きにルーティング。
- コレクションは、"集める"だけ = 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}%")