Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何在Rails 4上显示聚合结果_Ruby_Mongoid_Ruby On Rails 4_Aggregation_Moped - Fatal编程技术网

Ruby 如何在Rails 4上显示聚合结果

Ruby 如何在Rails 4上显示聚合结果,ruby,mongoid,ruby-on-rails-4,aggregation,moped,Ruby,Mongoid,Ruby On Rails 4,Aggregation,Moped,mongodb中的语法: db.orders.aggregate( {$unwind: "$lines"}, {$group : {_id: {sku: "$lines.sku", desc: "$lines.description"}, qty : {$sum : 1}}},{ $sort : { qty : -1}} ) 我想在Rails上显示上述查询的结果 我将Mongoid与Rai

mongodb中的语法:

db.orders.aggregate(
   {$unwind: "$lines"},
   {$group : 
             {_id: {sku: "$lines.sku", desc: "$lines.description"}, 
             qty : {$sum : 1}}},{ $sort : { qty : -1}}
                   )
我想在Rails上显示上述查询的结果

我将Mongoid与Rails 4和我的Gemfile一起使用:

gem 'mongoid', github: 'mongoid/mongoid'
据我所知,编写上述查询的唯一方法是为moped驱动程序安装gem。 因此,我的第一个问题是如何在Rails 4和Ruby 2.0的GEM文件中声明该行

我假设moped中的查询如下所示:

Order.collection.aggregate(
    {"$unwind" => "$lines"},
    {"$group" => {"_id" => {"sku" => "$lines.sku", desc => "$lines.description"}, 
    qty => {"$sum" => 1}}},
    { "$sort" => { "qty" => -1}})
我想通过单击索引页面上的按钮而不传递参数来显示此查询的结果。 第二个问题是,我不知道如何更改控制器和索引视图页面以放置调用此查询的按钮


更新

控制器的索引方法部分如下所示:

  def index
    @orders = if params[:search]
      Order.search(params[:search]).queryable.asc(:_id).paginate(:page => params[:page], :per_page => 20)
    elsif params[:search_from] && params[:search_to]
      Order.search_date(params[:search_from], params[:search_to]).queryable.asc(:_id).paginate(:page => params[:page], :per_page => 20)
    else
      Order.shipping_today(Date.today, Date.today).queryable.asc(:_id).paginate(:page => params[:page], :per_page => 20)
    end
index.html.erb:

<h1>Date: <%= Date.today %></h1>

<%= form_tag orders_path, :method => 'get' do %>
<p>Order date range:<br>  
    <%= text_field_tag :search_from, params[:search_from] %> - <%= text_field_tag :search_to, params[:search_to] %>
    <%= submit_tag "Search", :name => nil %>
</p>
<% end %>

<%= form_tag orders_path, :method => 'get' do %>
<p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
    <%= link_to "Reset", orders_path %>
</p>
<% end %>

<%= form_tag orders_path, :method => 'get' do %>
<p>
    <%= submit_tag "Statistics", :name => nil %>
</p>
<% end %>

<div class="digg_pagination">
    <div class="page_info">
      <%= page_entries_info @orders %>
    </div>
    <%= will_paginate @orders, :container => false %>
  </div>

  <br />

<table border = 1 >
  <thead>
    <tr>
      <th>Shipping date</th>
      <th>Order #</th>
      <th>Ship to name</th>
      <th>Tracking #</th>
      <th>Shipped</th>
      <th>Action</th>
      <th></th>
    </tr>
  </thead>

  <tbody>
  <% @orders.each do |order| %>
    <tr>
      <td><%= order.shipping_date %></td>
      <td><%= link_to order.order_number, order_path(order) %></td>
      <td><%= order.ship_to_fname %></td>
      <td><%= order.track_num %></td>
      <td><%= order.ship_date %></td>
      <td><%= link_to 'Edit', edit_order_path(order) %></td>
      <td><%= link_to 'New', new_order_path(order) %></td>
      <td><%= link_to 'Destroy', order, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>
</tbody>
</table>

<br />

<%= link_to 'New Order', new_order_path %>
日期:
'获取'执行%>
订单日期范围:
- 零%>

'获取'执行%> 零%>

'获取'执行%> 零%>

假%>
装运日期 命令# 船名 追踪# 装船 行动

您在gem文件中编写的
gem'mongoid',github'mongoid/mongoid'
应该足以让该查询工作

aggregate
commant之后,您将得到一个包含聚合结果的数组。 您可以将其分配给控制器中的实例变量,并在视图中对其进行迭代

例如:

# LinesController
def index
  @lines = Order.collection.aggregate(
    {"$unwind" => "$lines"},
    {"$group" => {"_id" => {"sku" => "$lines.sku", desc => "$lines.description"}, 
    qty => {"$sum" => 1}}},
    { "$sort" => { "qty" => -1}})
end

# lines/index.html.erb
<ul>
  <% @lines.each do |line| %>
    <li>
      <b><%= line['_id']['sku'] %></b>
      <%= line['qty'] %>
    </li>
  <% end %>
</ul>
#线路控制器
def索引
@行=Order.collection.aggregate(
{“$unwind”=>“$lines”},
{“$group”=>{“\u id”=>{“sku”=>“$lines.sku”,desc=>“$lines.description”},
数量=>{“$sum”=>1}},
{“$sort”=>{“数量”=>-1}})
结束
#行/index.html.erb

谢谢!我已经用我已有的索引方法更新了我的帖子。我的问题不清楚,所以我也更新了第二个问题。我理解您在上面展示的内容,我只是想知道如何通过单击“索引视图”页面上的按钮来调用此查询,以及我应该将您在上面展示的代码放在索引方法的何处。