如何在带有Ransack Gem的rails 4中使用sort_link和模型实例方法?

时间:2015-12-31 07:34:50

标签: ruby ruby-on-rails-4 sqlite ransack

我使用过Ransack Gem,Rails 4。

roles_controllers.rb

def index
  @q = Role.ransack(params[:q])
  @roles = @q.result(distinct: true)
end

这是模型中的实例方法(role.rb)

  def user_count
    self.users.count
  end

这是我的html表格标题(Roles / index.html.erb)

    <table class="table table-bordered table-framed rb-usr-tbl">
    <thead>
    <tr>
      <th><%= sort_link(@q, :name) %></th>
      <th>Description</th>
      <th><%= sort_link(@q,:role_users_user_count) %></th>
      <th colspan="2">Actions</th>
    </tr>
    </thead>

    <tbody class="role-index">
     <% @roles.each do |role| %>
        <tr>
          <td><%= role.human_role %></td>
          <td><%= role.description %></td>
          <td><%= role.user_count %></td>

          <td>
            <%= link_to edit_role_path(role), :remote => true,:title => "Edit Role" do %>
                <i class="icon-pencil7 rb-pencil"></i>
            <% end %>
          </td>
          <td>
            <%= link_to role, method: :delete,:title => "Delete Role", data: { confirm: 'Are you sure?' } do %>
                <i class="icon-trash rb-trash"></i>
            <% end %>
          </td>

        </tr>
    <% end %>
    </tbody>
  </table>

用户和角色之间存在关系,其中一个角色是多人用户。

在这里,我想按照asc和desc顺序对这个用户进行排序,但是使用此代码它不起作用。

如果可以,请帮助我。

由于

1 个答案:

答案 0 :(得分:-2)

Ransack本身非常聪明,试着换行

<th><%= sort_link(@q,:role_users_user_count) %></th>

<th><%= sort_link(@q, :users_count) %></th>

说明:在变量@q中,您在模型Role上保留了一个Ransack查询对象,如果您在sort_link上调用@q,它将会应用users_count as&#34;加入用户关系并按用户排序&#34;。