質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

0回答

674閲覧

railsのform_forで指定したurlにリダイレクトしない

zendendo

総合スコア43

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/09/25 13:19

編集2018/09/26 00:11

###目標・実現したいこと
ruby(ruby on rails)で、全てのページに表示するグローバルナビ(ヘッダー)に検索窓を設置して、
投稿したものを検索できるようにしたいと考えています。

例えば、投稿一覧(http://localhost:3000/item_stocks)とは関係ない
ユーザー設定のページ(http://localhost:3000/users/edit)で表示されている
グローバルナビで検索を行った場合・・・
検索ボタンを押すと投稿一覧のページに飛んで、検索結果が表示されるようにしたいのです

###問題点
しかし、
検索ボタンを押しても検索結果を表示する投稿一覧のページにリダイレクトせず、検索したページのままで困っています
エラー表示もありません。
URLを見ると、検索用のパラメータは作成されているみたいです。
http://localhost:3000/users/edit?utf8=%E2%9C%93&item_search_form%5Ball_search%5D=%E6%A4%9C%E7%B4%A2%E3%83%86%E3%82%B9%E3%83%88&button=

###現状のコード
現状のコードを説明すると・・・
フォームオブジェクトに検索機能を書きました。検索対象は、投稿(ItemStock)モデルだけとしています。
/app/forms/item_search_form.rb

ruby

1class ItemSearchForm 2 include ActiveModel::Model 3 4 attr_accessor :all_search 5 6 def search 7 rel = ItemStock.where(['item_name LIKE ?', "%#{all_search}%"]) 8 end 9end

全ての画面から行えるようにしたかったので、
applicationコントローラーに、検索用のパラメータと検索情報の受け渡しについて書きました。
app/controllers/application_controller.rb

ruby

1class ApplicationController < ActionController::Base 2 before_action :set_grobal_search 3 #グローバルナビにある検索の振る舞い 4 def set_grobal_search 5 @search_form5 = ItemSearchForm.new(globalnavi_all_search_params) 6 @search_item2 = @search_form5.search 7 end 8 9 protected 10 11 #グローバルナビからアイテム検索用 12 def globalnavi_all_search_params 13 params.fetch(:order_search_form, {}).permit(:all_search) 14 end 15 16end 17

layouts/viewの_header.html.erbには、
リダイレクト先のurlにitem_stockのindexページ(item_stocks_path)を指定してform_forを書きました。

/app/views/layouts/_header.html.erb(グローバルナビの共通テンプレート)

<nav class="navbar navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button class="navbar-toggle collapsed" data-toggle="collapse" data-target="#mobile_menu_header1">menu <i class='glyphicon glyphicon-align-justify'></i></button> <%= link_to "サービス名ロゴ", root_path, id: "logo" %> </div> <div class="collapse navbar-collapse" id="mobile_menu_header1"><!-- ハンバーガーメニュー格納 --> <form class="navbar-form navbar-left" role="search"> <span class="form-group"> <!--問題の検索フォーム部分、item_stocks_pathにリダイレクトしてくれない --> <% @search_form = ItemSearchForm.new unless @search_form %> <%= form_for @search_form5, url: item_stocks_path, method: :get do |f| %> <%= f.text_field :all_search, class: 'form-control', placeholder: 'アイテム名検索テスト中' %> <%= button_tag sanitize('<i class="glyphicon glyphicon-search"></i>'), :type => "submit",:class =>"btn btn-default" %> <% end %> </span> </form> </div><!-- ここまで格納機能に格納する内容 --> </div> </nav>

おそらくビューに問題の原因があり、リダイレクト先のURLを指定してあげれば大丈夫だと思ったのですが、ダメみたいです。
もし解決方法を知っているならば、教えて頂ければ幸いです。

###追記
ビュー(app/views/layouts/_header.html.erb)に2つの検索フォームを作成して試したところ、
1つ目はリダイレクトせず、
2つ目はリダイレクトに成功しました。

<form class="navbar-form navbar-left" role="search"><!-- 左側に検索窓(入力フォーム)を設置 --> <span class="form-group">       <!--一つ目の検索フォーム、なぜかリダイレクトには失敗 --> <%= form_for @search_form5, url: item_stocks_path, method: :get do |f| %> <% end %> <!--2つ目の検索フォーム、リダイレクトに成功 --> <% @search_form = ItemSearchForm.new unless @search_form %> <%= form_for @search_form5, url: item_stocks_path, method: :get do |f| %> <%= f.text_field :all_search, class: 'form-control', placeholder: 'アイテム名検索テスト中' %> <%= button_tag sanitize('<i class="glyphicon glyphicon-search"></i>'), :type => "submit",:class =>"btn btn-default" %><!-- 検索アイコンボタンを表示 --> <% end %> </span> </form>

その一方で、ヘッダーと同じく全体に表示するフッター部分テンプレートでは以下のコードでうまくいっています。
app/views/layouts/_footer.html.erb

<footer class="footer"> <nav> <ul> <li><%= link_to "About", '#' %></li> </ul> </nav> <!-- 検索フォーム--> <%= form_for @search_form5, url: item_stocks_path, method: :get do |f| %> <%= f.text_field :all_search, class: 'form-control', placeholder: 'アイテム名検索テスト中' %> <%= button_tag sanitize('<i class="glyphicon glyphicon-search"></i>'), :type => "submit",:class =>"btn btn-default" %> <% end %> </footer>

一応ヘッダーがこの状態でも、当初の目標を満たすことはできるのですが、
フッターではうまくいくのに、
ヘッダーで2つ検索フォームをつくらないとうまくいかない原因が不可解です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問