1

メッセージ ページにリダイレクトするのではなく、すべての URL で検索フォームが機能するようにしたいと考えています。たとえば、「こんにちは」の検索では次のようになります。

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

メッセージ モデル:

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

ユーザーモデル:

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

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

4

1 に答える 1

1

コントローラー/アクションハッシュを含むmessages_pathものに置き換えることができるはずです:url_for

<%= 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}

于 2016-05-24T15:40:44.410 に答える