在我看来,我想用两个按钮创建一个单一的搜索字段。点击第一个后,我想在搜索字段中使用字符串来搜索用户。当我单击第二个按钮时,我想使用字段中的字符串来搜索帖子。
我认为解决方案应该是这样的:
<%= form_tag([users_path, posts_path], method: 'get', id: 'search-form') do %>
<%= text_field_tag(:search, params[:search], id: 'search-field', placeholder: "Search") %>
<%= button_tag(:id => "search-user-btn", :controller => :users) do %>
<i class="icon-search-user"></i>
<% end %>
<%= button_tag(:id => "search-post-btn", :controller => :posts) do %>
<i class="icon-search-post"></i>
<% end %>
<% end %>
是否可以有一个text_field并分享两个按钮,每个按钮为不同的控制器路由(在这种情况下是用户和帖子)?
我该怎么做?
答案 0 :(得分:3)
在视图中:
<%= form_tag([users_path, posts_path], method: 'get', id: 'search-form') do %>
<%= text_field_tag(:search, params[:search], id: 'search-field', placeholder: "Search") %>
<%= submit_tag 'Option1' %>
<%= submit_tag 'Option2' %>
<% end %>
您可以在每个提交按钮的当前控制器中添加代码,如下所示:
def create
@user = User.new(user_params)
if params[:commit] == 'Option1'
# code for Option1
elsif params[:commit] == 'Option2'
# code for Option2
end
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
答案 1 :(得分:2)
如果您想直接回答,您可以使用以下内容:
<%= text_field_tag :search, params[:search], id: 'search-field', placeholder: "Search" %>
<% %w(posts users).each do |option| %>
<%= button_to "Search #{option.titleize}", eval("#{option}_path"), id: "search-#{option}-btn", method: :get, params: { search: "" } %>
<% end %>
每当您更改&#34; main&#34;时,您就可以使用一些JS填写button_to
个隐藏的搜索字段。搜索:
#app/assets/javascripts/application.js
$(document).on("keyup", "#search-field", function(){
val = $(this).val();
$("#search-posts-btn").val(val);
$("#search-users-btn").val(val);
});
提交后,每个button_to
都会产生相应的搜索值。
-
hugo
提到的警报方法是将所有请求发送到单个控制器操作,根据需要处理数据。
#config/routes.rb
get "search(/:search)", to: "application#search"
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
def search
if params[:search]
case params[:search][:commit]
when "option1"
# Search users
when "option2"
# Search posts
end
end
end
end
这样您就可以使用Hugo
提供的表单,将整个表单数据发送到/search
进行处理。