【问题标题】:Rails search form with no path没有路径的 Rails 搜索表单
【发布时间】:2016-05-24 15:18:54
【问题描述】:

我希望我的搜索表单适用于所有 URL,而不是重定向到消息页面。例如在搜索“hi”时:

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&amp;commit=Search) 复制并粘贴到页面上,它们可以正常工作。我尝试从表单中删除 messages_path,但出现错误。如何使用根据我使用的控制器而改变的表单路径?

【问题讨论】:

    标签: ruby-on-rails ruby search erb url-for


    【解决方案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},而不是。

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 2019-03-09
      相关资源
      最近更新 更多