Rails 没有路径的搜索表单
Rails search form with no path
我希望我的搜索表单适用于所有 URL,而不是重定向到消息页面。例如搜索 "hi":
on /messages return /messages?utf8=✓&search=hi&commit=Search
on /posts return /posts?utf8=✓&search=hi&commit=Search
在我的应用程序视图中(bootstrap 样式):
<%= 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=✓&search=hi&commit=Search)
复制并粘贴到页面上,它们可以正常工作。我尝试从表单中删除 messages_path
,但出现错误。我如何使用根据我从哪个控制器使用它而改变的表单路径?
您应该能够将 messages_path
替换为包含 controller/action 散列的 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}
。
我希望我的搜索表单适用于所有 URL,而不是重定向到消息页面。例如搜索 "hi":
on /messages return /messages?utf8=✓&search=hi&commit=Search
on /posts return /posts?utf8=✓&search=hi&commit=Search
在我的应用程序视图中(bootstrap 样式):
<%= 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=✓&search=hi&commit=Search)
复制并粘贴到页面上,它们可以正常工作。我尝试从表单中删除 messages_path
,但出现错误。我如何使用根据我从哪个控制器使用它而改变的表单路径?
您应该能够将 messages_path
替换为包含 controller/action 散列的 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}
。