【问题标题】:Build static dropdown menu for simple search Rails 3为简单的搜索 Rails 3 构建静态下拉菜单
【发布时间】:2012-06-21 07:20:31
【问题描述】:

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

非常感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails select


    【解决方案1】:

    您可以为下拉菜单添加 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
    

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

    【讨论】:

    • 我同意你的方法,但是 select_tag 有点奇怪......我已经尝试修复它
    • 是的。写得真快。在最后一行提到:) 只是想传达这个想法。
    • @sohaibbbhatti :谢谢,我只是在寻找这个......你节省了我的时间。 ;)
    【解决方案2】:

    如果您只允许用户使用一些固定属性过滤结果,那么扩展@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 :)

    【讨论】:

    • 谢谢。这一切都说得通,但我收到“Teachers#index 中的参数错误,参数数量错误(1 比 2)”错误消息,我似乎无法解决。这是否在某处遗漏了一个论点?
    【解决方案3】:

    你试过了吗:

    def self.search(column, search)
      # some logic
      where('? LIKE ?', column, "%#{search}%")
      # some logic
    end
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 2017-12-02
      相关资源
      最近更新 更多