Ruby 如何在Rails 4上显示聚合结果
mongodb中的语法: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
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
-
谢谢!我已经用我已有的索引方法更新了我的帖子。我的问题不清楚,所以我也更新了第二个问题。我理解您在上面展示的内容,我只是想知道如何通过单击“索引视图”页面上的按钮来调用此查询,以及我应该将您在上面展示的代码放在索引方法的何处。