ruby-on-rails - 雷和 order_by

标签 ruby-on-rails ruby ruby-on-rails-3

所以我列出了我站点的所有成员并按名称对他们进行分组,以便更好地组织列表。所以在我看来,我所有的成员都是按成员姓名的首字母分组的,例如:

B

Bakedfish
Beercan Dan
Bigmike33x 

C

Cynicalassassin
ect..

无论如何,我也想对这个列表进行分页,但如果我使用顺序,我无法将 Kaminari 的分页参数添加到我的 Controller ,因为我收到未定义的方法错误。

所以这行不通:

@members = Member.all.group_by{|u| u.fullname[0].titleize}.page(params[:page]).per(18)

我的观点是这样的:

<div class="content">
  <%= paginate @members %>
</div>
    <% @members.keys.sort.each do |starting_letter| %>
            <h3>
            <%= link_to starting_letter, {:action => :browse, :controller =>:members, :letter => starting_letter } %>
</h3>
      <ol>
                <% @members[starting_letter].each do |member| %>
                    <li>
                        <% if member.is_artist? %>
                            <%= link_to member.full_name, member_path(member), :class=>"artist" %>
                        <% else %>
                            <%= link_to member.full_name, member_path(member) %>
                        <% end %>
                    </li>
                <% end %>
        </ol>
    <% end %>

这是我的错误信息:

NoMethodError (undefined method `page' for #<Hash:0x007f78d4bf48f8>):
  app/controllers/members_controller.rb:10:in `index'

最佳答案

Kaminari 将 page 方法添加到 ActiveRecord::RelationMember.all.group_by 返回哈希。这就是您得到此异常的原因。

我建议在分页后进行分组,例如:

@members = Member.order(:full_name).page(params[:page]).per(18).to_a.group_by { |u| u.fullname[0].upcase }

更新

为了使用 paginate 助手,您可以分配 2 个变量,例如:

@paginated_members = Member.order(:full_name).page(params[:page]).per(18)
@members = @paginated_members.to_a.group_by { |u| u.fullname[0].upcase }

并将 @paginated_members 传递给 paginate 助手。

关于ruby-on-rails - 雷和 order_by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757438/

相关文章:

ruby-on-rails - rails I18n : error 'translation missing' when i try translate this words "off"

ruby - Rails 3- Active_admin 和 CanCan 集成

ruby-on-rails - 如何禁用 Draper 装饰器生成器?

ruby-on-rails - Rails 5 ActionCable通过URL参数建立流

ruby-on-rails - 将 redirect_to 格式更改为 :js in Rails

mysql - 在rails中编写activerecord查询

ruby - 仅当注册表值不存在时执行

ruby-on-rails - Rails 电子邮件与 gmail smtp 错误 "Errno::ECONNREFUSED - No connection could be made because the target machine actively refused it."

ruby-on-rails - Sendmail 在 Linux 终端中工作,而不是在 Rails 3 中工作

javascript - Rails 406 "Not Acceptable"远程表单错误?