2016-05-24 15 views
1

私の検索フォームをメッセージページにリダイレクトするのではなく、すべてのURLで機能させたいと思います。私のアプリケーションビュー(ブートストラップスタイリング)でパスのないRails検索フォーム

on /messages return /messages?utf8=✓&search=hi&commit=Search 

on /posts return /posts?utf8=✓&search=hi&commit=Search 

<%= form_tag(messages_path, :method => "get", class: "navbar-form navbar-left") do %> 
    <div class="form-group"> 
      <%= text_field_tag :search, params[:search], placeholder: "Search", class: "form-control" %> 
    </div> 
    <%= submit_tag "Search", class: "btn btn-default" %> 
<% end %> 

メッセージコントローラ:

def index 
    if params[:search] 
     @messages = Message.search(params[:search]).order("created_at DESC") 
    else 
     @messages = Message.all.order("created_at DESC") 
    end 
end 

ユーザーコントローラ:

def index 
    if params[:search] 
     @users = User.search(params[:search]).order("created_at DESC") 
    else 
     @users = User.all.order("created_at DESC") 
    end 
end 
"HI" の検索の例

メッセージモデル:

def self.search(search) 
    where("title LIKE ?", "%#{search}%") 
end 

Userモデル:

def self.search(search) 
    where("username LIKE ?", "%#{search}%") 
end 

私はコピーして、ページ上にパラメータ(?utf8=✓&search=hi&commit=Search)を貼り付けた場合、彼らは正常に動作。フォームからmessages_pathを削除しようとしましたが、エラーが発生しました。どのコントローラーを使用しているかに基づいて変更されるフォームパスを使用するにはどうすればよいですか?

答えて

1

あなたは、コントローラ/アクションハッシュを含んurl_formessages_pathを交換することができるはずです。

<%= form_tag(url_for(controller: controller_name, action: "search"), :method => "get", class: "navbar-form navbar-left") do %> 

これはあなたのフォームビューを提供している方のコントローラに基づいて/#{controller_name}/searchパスを提供します。

あなたは検索がインデックスに行きたい場合は、単にこのバリエーションを使用します。

<%= form_tag(url_for(controller: controller_name, action: "index"), :method => "get", class: "navbar-form navbar-left") do %> 

とではなく、/#{controller_name}にフォームを送信します。

+0

ありがとう、美しく動作します! – Robert