2回目以降の検索でキーワードがURLに追加されている!?
結論
× => = text_field
◯ => = text_field_tag
概要
【条件】
- Rails 5.0.6
- Ruby 2.3.1
- haml
【機能】
- 検索
- submitボタンはなし(Enter)
- 画面移管する
【課題】
- 2回目以降の検索でURLにキーワードが追加され続ける。
- 検索はできる。
下記のコードで実装していました。
views
header.html.haml
.col-md-1.search-box
= form_tag( search_articles_path, method: :get ) do
= image_tag 'glass.svg', { class: 'glass' }
= text_field :key, params[:key], { placeholder: "検索する", class: "text" }
controller
articles_controller.rb
def search
@article = Article.new
@comment = Comment.new
#検索機能
@articles = Article.search(params[:key])
end
model
article.rb
def self.search(key)
if key
Article.where(['title LIKE ?', "%#{key}%"])
else
#ここは改善の余地あり
Article.all
end
end
これでは検索の度にURLに/articles/search?utf8=✓&key%5B%7B"ドラマ"%3D>"qiita"%7D%5D=確認
の様にどんどん増え続けてしまって格好が悪いですよね。
これで解決!!
views(修正)
header.html.haml
.col-md-1.search-box
= form_tag( search_articles_path, method: :get ) do
= image_tag 'glass.svg', { class: 'glass' }
= text_field_tag :key, params[:key], { placeholder: "検索する", class: "text" }
解説
1時間悩みましたが、結局はform_tagの中で= text_field
では無く= text_field_tag
に変えるだけで解決しました。
hamlの書き方に慣れていなかった事やform_tagについて理解が浅かった事が原因でしょうね。
お願い
= text_field
と= text_field_tag
の明確な違いをご存知の方はコメント欄で教えていただけるとありがたいです!!