2

我在我的 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

非常感谢任何帮助。

4

3 回答 3

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

我用粗略的方式写了它,但我希望它能传达信息。

于 2012-06-21T07:32:17.093 回答
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 :)

于 2012-06-21T08:03:35.783 回答
0

你有没有尝试过:

def self.search(column, search)
  # some logic
  where('? LIKE ?', column, "%#{search}%")
  # some logic
end
于 2012-06-21T07:29:16.920 回答