我使用过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顺序对这个用户进行排序,但是使用此代码它不起作用。
如果可以,请帮助我。
由于
答案 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;。