我在rails应用程序中进行了简单的搜索,但它只搜索我的表格中的一列。我正在尝试添加一个简单的下拉菜单,其中包含“last_name”和“city”等选项,以便用户可以选择要搜索的列。
在我看来,我有:
<%= form_tag teachers_path, :method => 'get', :id => "teachers_search" do %>
<%= hidden_field_tag :direction, params[:direction]%>
<%= hidden_field_tag :sort, params[:sort]%>
<p>
<%= text_field_tag :search, params[:search], placeholder: 'First Name' %>
<%= submit_tag "Search", :first_name => nil %>
</p>
<% end %>
在我的模特中:
def self.search(search)
if search
where('first_name LIKE ?', "%#{search}%")
else
scoped
end
end
非常感谢任何帮助。
答案 0 :(得分:2)
您可以为下拉菜单添加select_tag
<%= select_tag "search_from", "<option>first_name</option><option>last_name</option><option>city_name</option>".html_safe%>
在控制器中,您可以将params [:search_from]中的值传递给搜索方法。并修改它以包括列名
def self.search(search, column_name)
if search
where('? LIKE ?', column_name, "%#{search}%")
else
scoped
end
end
我是用粗俗的方式写的,但我希望它能得到这样的信息。
答案 1 :(得分:1)
如果您只允许用户使用某些固定属性过滤结果,那么扩展@ sohaibs的答案下拉列表是一个好主意
<强>视图强>
<%= select_tag "search_by", options_for_select(['first_name','last_name','city'].map{|o| [o.humanize,o] }) %>
<%= f.text_field 'search' %>
<强>控制器强>
def search
User.search params[:teacher][:search_by],params[:teacher][:search]
end
和模型
def self.search(search_by,search_value)
where('? LIKE ?', search_by, search_value)
end
令人敬畏的Rails:)
答案 2 :(得分:0)
你试过了吗?
def self.search(column, search)
# some logic
where('? LIKE ?', column, "%#{search}%")
# some logic
end