2014-05-05 9 views
1

У меня есть контроллер выглядит следующим образом:will_paginate с хэш в Rails

## 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 

И просмотров:

## 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> 

я получил ошибку:

ArgumentError в Lhgs # индекс

Показаны C: /Sites/cms/app/views/lhgs/_totalsolds.html.erb где строка 65 поднята:

Переменная @lhgs кажется пустой. Вы забыли передать объект коллекции для will_paginate?

я нашел же question и solution, но я не могу понять, как использовать его для моего случая.

UPDATE:

Я не нашел нигде @lhgs переменную, я попытался изменить @totalsolds к @lhgs и теперь мой контроллер lookslike:

## 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 

И это ошибка:

NoMethodError in LhgsController#index 

undefined method `paginate' for #<Hash:0x4c034a0> 

Использование консоли рельсов:

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 

pastebin

+1

Я не вижу ссылку на '@ lhgs' везде. Вы уверены, что скопировали правильные файлы? – tyler

+0

меня тоже, я смущаюсь. Да, я уверен. – itx

+0

@tyler: Я обновляю свой вопрос. – itx

ответ

1

решаемые

reference

На контроллере:

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 

И на виду:

<% @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> 
0

Попробуйте так:

# 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 

И 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> 
Смежные вопросы