2014-09-02 110 views
0

創建遷移到預定義屬性可以具有的值時有什麼辦法嗎?Rails用戶 - 與預定義角色的角色關係?

class User < ActiveRecord::Base 
    belongs_to :role 
end 

class Role < ActiveRecord::Base 
    has_many :users 
end 

和我的遷移:

class CreateRoles < ActiveRecord::Migration 
    def change 
    create_table :roles do |t| 
     t.string :name # (regular, admin, etc) => how can we define these as a list? 
     t.timestamps 
    end 
    end 
end 

class AddRoleToUser < ActiveRecord::Migration 
    def change 
    add_column :users, :role_id, :integer 
    end 
end 
+0

您可以在創建角色表後立即運行Rails代碼。像夾具導入可以工作 – MrYoshiji 2014-09-02 17:10:21

回答

1

一種方法是使用一個validation like in this question及其兩個很好的答案。這驗證了給定列中的值是定義的值列表之一。您可以將驗證添加到您的用戶模型中,並完全拋棄角色模型,或將其添加到角色的名稱字段。這可能是最簡單,最Rails的方式。您可以在您的應用程序中定義一個包含已批准角色列表的常量,然後使用最適合您的任何維護該列表的常量。

另一種方法是使您的角色模型成爲ActiveHash模型而不是ActiveRecord。 ActiveHash允許您設置像ActiveRecord模型一樣的模型,但不是存儲在數據庫中,而是模型文件中由散列定義的只讀模型。 (我非常簡單地說明ActiveHash是如何工作的,但我認爲這是一個開始。)再次,您可以使用應用程序常量來維護哈希。

將角色保留爲模型的好處在於,如果您決定走這條路線,它允許用戶擁有多個角色。