2010-04-24 33 views
5

G'day guys,我正在过滤我的系统中有几千个贸易项目的演示文稿。根据我们正在构建的系统的规格,我们必须有一个表单,允许用户输入开始日期,然后在几分钟内输入时间间隔,以过滤项目的表示。我已经构建了我的帮助器函数以在该间隔时间内返回所有交易,但是我无法正确构建将在索引页顶部返回dateTime值和整数值的表单吗?构建一个rails窗体来过滤索引页面?

任何想法?我是否必须建立一个单独的模型对象来分配值,还是有一个更简单的方法?

回答

16

在你的索引页面,您可以创建一个过滤器表单如

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

你的表格然后会做的查询字符串参数,然后在你的控制器,你可以找滤波器参数您的网页上获取可能已经通过了。

+2

如果你想从URL中省略'&commit = Filter',你可以写'<%= submit_tag'Filter',name:nil%>'。 – 2013-11-12 18:50:10

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形式助手),您的数据库查询将返回所有记录。

+1

我喜欢这种方法(这是问题答案的第二部分!)。也许不是'!params [...]空白吗?“这个”params [...]存在?“稍微漂亮一些。 – 2012-08-05 15:25:21

+4

实际上,您不必逐渐构建这样的过滤器,而是应该逐渐构建一个活动记录查询,方法是通过调用各种条件的where语句逐步缩小结果集。即使您有多次对LogEntry模型的调用,Rails也足够聪明,可以在一个语句中执行它。 – Noz 2012-11-09 22:47:15