Ruby 如何在Ransack Gem的rails 4中使用带有模型实例方法的sort_link?
我使用了Ransack Gem,Rails 4 角色\u控制器.rbRuby 如何在Ransack Gem的rails 4中使用带有模型实例方法的sort_link?,ruby,ruby-on-rails-4,sqlite,ransack,Ruby,Ruby On Rails 4,Sqlite,Ransack,我使用了Ransack Gem,Rails 4 角色\u控制器.rb def index @q = Role.ransack(params[:q]) @roles = @q.result(distinct: true) end def user_count self.users.count end <table class="table table-bordered table-framed rb-usr-tbl"> <thead&g
def index
@q = Role.ransack(params[:q])
@roles = @q.result(distinct: true)
end
def user_count
self.users.count
end
<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>
这是模型中的实例方法(role.rb)
这是我的html表格标题(Roles/index.html.erb)
描述
行动
true,:title=>“编辑角色”do%>
“删除角色”,数据:{确认:'确定吗?}执行%>
用户和角色之间存在关系,一个角色有多个用户
在这里,我想按asc和desc顺序对用户计数进行排序,但使用此代码它不起作用。
如果可以的话,请帮助我
谢谢Ransack本身非常聪明,试着换线
<th><%= sort_link(@q,:role_users_user_count) %></th>
到
说明:在变量
@q
中,您在模型角色
上保留了一个Ransack查询对象,如果您在@q
上调用排序链接
,它将应用用户计数
作为“加入用户关系并按用户计数排序”.您还可以从角色控制器粘贴索引方法的代码吗?这里我已经上传了控制器和视图的代码。如果您有,请检查并告诉我解决方案。@Surya:您有问题的答案吗?试试这个:我怀疑您的角色中有user_id列,那么您可能需要相应地更改ransack的查询。尝试在“角色”表中为用户设置计数器缓存,然后使用“用户计数”进行排序,如链接中所述。@Surya:用户表中有角色id。你给出的链接与我所问的不同。首先理解我的问题,然后给出答案。
<th><%= sort_link(@q, :users_count) %></th>