记录:后台查询时间内创建的用户数量

我们想查询每天的注册用户数量和生成简历的数量,每次都需要上数据库输入命令查询,这样既麻烦又不安全。既然知道查询的命令,写成一个method也是可能的,下面就记录一下如何做这样一个功能。 查询代码如下User.where('created_at >= :date_select',:date_select => Time.now - 1.days) 思路是这样的我们在网页端的输入框内输入想要的时间天数,然后向后端传送这样输入值。怎么传这个参数我只能想到利用ajax。 下面是前端的输入框代码(integer限制输入内容):

<div class="col-md-3">
      <p>输入日期(天)查询创建用户</p>
      <input type="number"  step="1" name="date" value="" id="user_count" integer></input>
      <button type="button" name="button" id="user_select_submit">提交</button>
</div>

下面是ajax代码:registration_user_admin_users_path为POST请求地址。

      $(document).ready(function(e) {
            $('#user_select_submit').click(function(e) {
                var date = $('#user_count');
                var data = 'date=' + date.val();
                $.ajax({
                    url: '<%= registration_user_admin_users_path %>',
                    type: "post",
                    data: data,
                });
                return false;
            });
        });

这里点击button传送出params[:date]这个参数

 def registration_user
   @date = params[:date]
   @registration_user = User.where('created_at >= :date_select',:date_select => Time.now - @date.to_i.days)
   #  params[:t] =  @registration_user.collect(&:id)
   params[:date_select] =  Time.now - @date.to_i.days  这里ajax传过来的参数是string要格式化一下
   redirect_to show_select_user_admin_users_path(@registration_user)
   puts @registration_user.count
 end

在server端验证puts出来的值,我想用redirect_to的方法把下一个值传过去,但是redirect_to只能把参数传送到views端,如果想用在下一个def是需要在views把相应的值显示出来。就比如想要传的下一个def里面要想显示出@registration_user的值是要利用当前页面是否有能够知道这个参数的key,单纯的写@registration_user等于什么什么只能得出nil。想过用collect(&:id)把所有的id包装成array传过去,然后用where id的办法筛选出来。但是传送不到下一个def值,什么办法都是白费。下面写的是一种解法,我只把:date_select =>params[:date_select]这个值传递给下一个页面,然后再页面调用这个值来筛选想要的数据。

 def registration_user
   @date = params[:date]
   @registration_user = User.where('created_at >= :date_select',:date_select => Time.now - @date.to_i.days) #这行代码可以去掉无用!!!还不舍得删 菜
   #  params[:t] =  @registration_user.collect(&:id)
   params[:date_select] =  Time.now - @date.to_i.days
   redirect_to show_select_user_admin_users_path(:date_select =>params[:date_select])
 end

下面是views端如果调用这个数据的http://localhost:3000/admin/users/show_select_user?date_select=2017-02-05+00%3A53%3A35+%2B0800后面的问号代表了可以调用这个数据了(我也不知道这是什么),我传过这个@registration_user在浏览器上显示的是activerecord的什么什么。。。下面的代码不能少不能去掉:date_select => params[:date_select]不知道这是为什么'created_at >= :date_select'前面的代码已有:date_select这个方法了,view端也传过来了,难道不能智能调用,而是需要:date_select => params[:date_select]重新再把这个拿过来?

<div class="container">
    <% resume = Resume.where('created_at >= :date_select',:date_select => params[:date_select]) %>
    <h4>按当前查询时间新建用户数量为&nbsp;<%= resume.count %>&nbsp;个</h4>
    <table class="table table-hover">
        <thead>
            <tr>
                <td>ID</td>
                <td>创建时间</td>
                <td>更新时间</td>
                <td>简历名称</td>
                <td>简历用户</td>
            </tr>
        </thead>
        <% resume.each do |r| %>
        <tbody>
            <td><%= r.id %></td>
            <td><%= r.created_at.strftime("%m/%e, %l:%M %p") %></td>
            <td><%= r.updated_at.strftime("%m/%e, %l:%M %p") %></td>
            <td><%= r.resume_name %></td>
            <td><%= r.name_resume %></td>
        </tbody>
        <% end %>
    </table>
</div>

感觉应该可以用ajax边输入天数就能在当前页面得到user的数据的,可是解决不了如果即post还get,用ajax get也是可以传送数据的,但是得到的页面会被重新render,如何get数据的时候callback已经利用传送数据run一遍的数据呢?