在rails中对habtm数据进行排序

时间:2012-04-10 11:26:58

标签: ruby-on-rails sorting has-and-belongs-to-many

我有以下数据库:

class User < ActiveRecord::Base
  has_and_belongs_to_many :apps

class App < ActiveRecord::Base
  has_and_belongs_to_many :users

在用户视图(users/show.html.haml)中,我想列出所有按当前用户排序的应用排序。

%table
  %thead
    %tr
      %th Name
      %th Available
  -  for app in App.order("??????")
    %tr
      %td= link_to app.name, app_path(app)
      %td 
        - if @user.apps.include?(app)
          %i.icon-ok
        - else
          %i.icon-remove

我的问题是我在订单功能中添加了什么来进行排序。

4 个答案:

答案 0 :(得分:2)

或通过类似的东西:

App.all.partition{|app| @user.apps.include?(app)}.flatten

有多种方法可以做到!

答案 1 :(得分:1)

如果我理解正确,您希望将应用程序与属于当前用户的应用程序排在第一位。我不认为这在一个查询中是可能的。我认为最简单的方法是将其拆分为两个查询:

user_apps     = current_user.apps
non_user_apps = App.where(:id.not_in => current_user.app_ids)
@apps         = user_apps + non_user_apps

然后你可以迭代这个@apps数组,元素将按你想要的顺序排列。

答案 2 :(得分:0)

在订购方法中,您可以放置​​所需的任何应用程序方法名称。它可以是

App.order(:id)
App.order(:name)
App.order(:created_at)

或其他任何内容。

答案 3 :(得分:0)

试试这个:     @ user.apps.order(:名称)