构建一个rails表单来过滤索引页面?

时间:2010-04-24 04:30:02

标签: ruby-on-rails ruby forms

G'day伙计们,我在过滤我系统中数千种商品的展示时遇到了问题。根据我们正在构建的系统的规格,我们必须有一个表单,允许人们输入开始日期,然后是几分钟的间隔,以过滤项目的表示。我已经构建了我的帮助函数来返回该间隔期内的所有交易,但我不能在我的生活中正确构建将在索引页顶部返回dateTime值和整数值的表单?

有什么想法吗?我是否必须构建一个单独的模型对象来分配值,或者是否有更简单的方法?

2 个答案:

答案 0 :(得分:17)

在索引页面上,您可以创建一个像这样的过滤器表单

<%= form_tag '', :method => :get do %>
  <%= text_field_tag :value_one %>
  <%= text_field_tag :value_two %>
  <%= submit_tag 'Filter' %>
<% end %>

然后,您的表单将在您的页面上使用查询字符串参数执行GET,然后在您的控制器中,您可以查找可能已传递的过滤器参数。

答案 1 :(得分:2)

我喜欢在我的控制器中逐渐构建一个过滤器,即:

def index

  filter = []

  if params.has_key?("filter")

    if !params[:filter][:user_id].blank?
      id = params[:filter][:user_id]
      filter << ["user_id = #{id.to_i}"]
    end

    if !params[:filter][:project_id].blank?
      id = params[:filter][:project_id]
      filter << ["project_id = #{id.to_i}"]
    end

    if !params[:filter][:change_type_id].blank?
      id = params[:filter][:change_type_id]
      filter << ["change_type_id = #{id.to_i}"]
    end

  end

  @logs = LogEntry.where(filter.join(" AND ")).order('created_at DESC')    

end

如果视图中未选择过滤器(我使用select_tag表单助手),则数据库查询将返回所有记录。