LoginSignup
1
2

More than 5 years have passed since last update.

【Rails5】投稿記事を検索する機能をのせたので覚えがき/form_tag

Last updated at Posted at 2018-10-22

Railsでscaffoldを使い、投稿アプリを作成しました。
その中で検索窓を実装し、タイトルから検索するフォームを実装しました。
https://qiita.com/budougumi0617/items/d98fc15adea4dab438e7
この変更を参考にしましたが、覚え書きメモとして記載

【前提】
scaffold名は「review」です。
review モデル
reviewsコントローラー
review/index.htmlに投稿フォームをのせております。

reviews/indexビュー
コントローラー
モデル
ルート
に記述。

index.html.erb
<%= form_tag reviews_path, :method => 'get' do %> 

  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "レビューを検索する", :name => nil %>
  </p>
<% end %>

メモ1: review_pathのところはモデル名に変更

review.rb
  def self.search(search) 
    if search
     Review.where(['gametitle LIKE ?', "%#{search}%"])
    else
     Review.all
    end
  end

メモ2&疑問
self.でクラスメソッドとしている。
が、同じものをモデル内には書かずにコントローラーに書いたらなぜかエラーになる。
クラスメソッドにする理由はよくわかっていない。。

【ワンポイント】
ちなみにここで、
Review.where('gametitle LIKE ? OR title LIKE ?', "%#{search}%", "%#{search}%")
とすると、複数のカラムを検索対象にすることも可能でした。

reviews_controller.rb
  def index
    @reviews = Review.search(params[:search])
  end
route.rb
  resources :reviews do
    collection do
      get 'search' => 'reviews#search'
    end
  end

メモ3:
collection do とは、
resourcesの中にルーティングを追加する動きっぽい。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2