[英]Will_paginate with hash in Rails
I have controller looks like : 我有控制器看起来像:
## controllers/lhgs_controller.rb
def index
@per_page = params[:per_page] || 10
@totalsolds = Totalsold.paginate(:per_page => @per_page, :page => params[:page]).order('date asc').group_by{ |s| [s.date, s.store_id, s.nomor] }
end
And views : 和意见:
## index.hmtl.erb
<div id="totalsolds"><%= render 'totalsolds' %></div>
## views/_totalsolds.html.erb
<% @totalsolds.each do |(date, store, nomor), totalsold| %>
<tr>
<td><%= date.strftime("%d/%m/%Y") %></td>
<td><%= nomor %></td>
<td><%= Store.find(store).name %></td>
<% totalsold.each do |ts| %>
<td><%= ts.qty == 0 || ts.qty == nil ? "-" :prod.qty %></td>
<% end %>
<td>Rp<%= number_to_currency(totalsold.sum(&:value), :unit => "") %></td>
<td><%= link_to "edit", edit_bt_path(:store_id => store, :date => date, :nomor => nomor), :class => "btn btn-primer" %></td>
</tr>
<% end %>
...
...
<div class="row">
<div class="col-sm-6">
<% line 65 %>
<%= page_entries_info @totalsolds %>
</div>
<div class="col-sm-6">
<%= will_paginate @totalsolds, :style => 'float:right;margin-top:-5px;height:30px;' %>
</div>
</div>
I got an error : 我有一个错误:
ArgumentError in Lhgs#index Lhgs#index中的ArgumentError
Showing C:/Sites/cms/app/views/lhgs/_totalsolds.html.erb where line 65 raised: 显示C:/Sites/cms/app/views/lhgs/_totalsolds.html.erb,其中第65行出现:
The @lhgs variable appears to be empty. @lhgs变量似乎为空。 Did you forget to pass the collection object for will_paginate? 您是否忘记为will_paginate传递收集对象?
I found same question and solution , but I can't figure out how to use it for my case. 我发现了相同的问题和解决方案 ,但是我不知道如何在我的案例中使用它。
UPDATE : 更新 :
I'm not found anywhere @lhgs
variable, I tried to change @totalsolds
to @lhgs
and now my controller lookslike : 我在任何地方都@lhgs
变量,我试图将@totalsolds
更改为@lhgs
,现在我的控制器看起来像:
## controllers/lhgs_controller.rb
def index
@per_page = params[:per_page] || 10
@lhgs = Totalsold.order('date asc').group_by{ |s| [s.date, s.store_id, s.nomor] }
@lhgs = @lhgs.paginate(:per_page => @per_page, :page => params[:page])
end
And this an error : 这是一个错误:
NoMethodError in LhgsController#index
undefined method `paginate' for #<Hash:0x4c034a0>
Use rails console : 使用rails控制台:
irb(main):001:0> @lhgs = Totalsold.order('date asc').group_by{ |s| [s.date, s.store_id, s.nomor] }
.... look at pastebin ......
irb(main):002:0> @lhgs.class
=> Hash
Solved 解决了
On controller : 在控制器上:
def index
@per_page = params[:per_page] || 10
@lhgs = Totalsold.order('date asc').group_by{ |s| [s.date, s.store_id, s.nomor] }
@lhgs_keys = @lhgs.paginate(:per_page => @per_page, :page => params[:page])
end
And on view : 并在视图中:
<% @lhgs_keys.each do |k| %>
<% @lhgs[k].group_by{ |s| [s.date, s.store_id, s.nomor] }.each |(date, store, nomor), totalsold| %>
.....
....
<% end %>
<% end %>
<div class="row">
<div class="col-sm-6">
<% line 65 %>
<%= page_entries_info @lhgs_keys %>
</div>
<div class="col-sm-6">
<%= will_paginate @lhgs_keys, :style => 'float:right;margin-top:-5px;height:30px;' %>
</div>
</div>
Try it like this: 像这样尝试:
# controllers/lhgs_controller.rb
def index
@per_page = params[:per_page] || 10
@totalsolds = Totalsold.paginate(:per_page => @per_page, :page => params[:page]).order('date asc').group_by{ |s| [s.date, s.store_id, s.nomor] }
respond_to do |format|
format.html
end
end
And the index.html can be like this: 而且index.html可以像这样:
<% @totalsolds.each do |(date, store, nomor), totalsold| %>
<tr>
<td><%= date.strftime("%d/%m/%Y") %></td>
<td><%= nomor %></td>
<td><%= Store.find(store).name %></td>
<% totalsold.each do |ts| %>
<td><%= ts.qty == 0 || ts.qty == nil ? "-" :prod.qty %></td>
<% end %>
<td>Rp<%= number_to_currency(totalsold.sum(&:value), :unit => "") %></td>
<td><%= link_to "edit", edit_bt_path(:store_id => store, :date => date, :nomor => nomor), :class => "btn btn-primer" %></td>
</tr>
<% end %>
...
<div class="row">
<div class="col-sm-6">
<% line 65 %>
<%= page_entries_info @totalsolds %>
</div>
<div class="col-sm-6">
<%= will_paginate @totalsolds, :style => 'float:right;margin-top:-5px;height:30px;' %>
</div>
</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.