我在Rails項目中寫了一個簡單的員工目錄,但我希望通過他們在應用程序中的角色排序用戶列表由數據庫中的字符串定義)。通過他們的角色來訂購用戶,首先在ActiveRecord中顯示管理員和管理員
我希望管理員先出現,然後是管理員,然後是發佈者,最後是用戶。
字母順序恰好適用於時間,但是當我們在將來添加新角色並且該角色的名稱不符合字母順序時,該怎麼辦?
我在Rails項目中寫了一個簡單的員工目錄,但我希望通過他們在應用程序中的角色排序用戶列表由數據庫中的字符串定義)。通過他們的角色來訂購用戶,首先在ActiveRecord中顯示管理員和管理員
我希望管理員先出現,然後是管理員,然後是發佈者,最後是用戶。
字母順序恰好適用於時間,但是當我們在將來添加新角色並且該角色的名稱不符合字母順序時,該怎麼辦?
rails g model role role_name:string
$rails g model user name:string age:integer role_id:integer
$rake db:migrate
#seed.rb
#Save those roles in role table.
roles = %w(Admin, Manager, publisher, user)
roles.each do |role|
Role.create(role_name: role)
end
$ rake db:seed
#user.rb
belongs_to :role
#role.rb
has_many :users
# get users ordered by their roles.
User.all.order('role_id DESC')
# in case you are not sure about their IDs.
Role.includes(:users).map {|role| role.users }
above one will return the users ordered by the roles.
把你的角色定義成自己的錶帶有某種「ORDER_BY」字段中(個人不喜歡使用記錄ID作爲排序標準的)。我使用這種方式來處理隨時間推移而延展的各種參考數據,但我希望按照定義的順序進行展示。擁有一個表格意味着您可以通過簡單的管理界面隨意添加/編輯/刪除值並重新排序 - 排序不依賴於代碼或描述。 (這個例子是grails GORM,但是轉化爲rails很容易 - grails也爲表添加了一個隱含的id列,所以在類定義中不會顯示,所以將角色valcode記錄的id存儲在你的用戶中)。
class Valcode {
String v_tier_1
String v_tier_2
String v_tier_3
String v_code
String v_description
Integer v_order
}
v_tier_1 - v_tier_3是任意的分組值。 v_tier_1可能是「角色」。 v_code我用作一些視圖的縮寫,v_description是視圖的全名,有足夠的空間。 v_order只是從數據庫中檢索數據時應用的排序值。
這是值得downvoting? – Ravenstine 2015-01-09 22:56:13