2011-05-01 13 views
6

Estoy intentando construir un archivo seeds.rb para agregar un usuario administrador inicial a la base de datos. Tengo una tabla y un modelo de Usuarios, y una tabla y modelo de Roles. Tengo una tabla de unión, roles_users para unirme a la función y los permisos de los usuarios. He aquí el esquema:¿Cómo se agrega información JOIN a un archivo rails seeds.rb?

create_table "roles", :force => true do |t| 
    t.string "name" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    create_table "roles_users", :id => false, :force => true do |t| 
    t.integer "role_id" 
    t.integer "user_id" 
    end 

    create_table "users", :force => true do |t| 
    t.string "email",        :default => "", :null => false 
    t.string "encrypted_password", :limit => 128, :default => "", :null => false 
    t.string "reset_password_token" 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",      :default => 0 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.string "current_sign_in_ip" 
    t.string "last_sign_in_ip" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "first_name" 
    t.string "last_name" 
    end 

He descubierto la manera de agregar los usuarios y los roles que utilizan los modelos repsective para cada uno:

#Setup our default roles 
Role.create(:name => "super_admin") 
Role.create(:name => "school_leader") 
Role.create(:name => "school_staff") 
Role.create(:name => "student") 


#Setup and initial super admin user 
User.create(:first_name => "admin", :email => "[email protected]", :password => "admin") 

¿Cómo agrego la unión para que conceda la super_admin de administración privilegios (la base de datos utilizada es sqlite3)?

Respuesta

3

Suponiendo que usted ha definido una asociación has_and_belongs_to_many en su modelo de usuario:

has_and_belongs_to_many :roles, :join_table => "roles_users" 

En el archivo seeds.rb, a continuación, puede agregar funciones a un usuario como se muestra a continuación (este ejemplo se agrega todos los roles para el usuario):

u = User.create(:first_name => "admin", :email => "[email protected]", :password => "admin") 
Role.all.each { |role| u.roles << role } 

conceder el usuario sólo el papel 'super_admin', que podría hacer algo como esto:

u = User.create(:first_name => "admin", :email => "[email protected]in.com", :password => "admin") 
u.roles << Role.find_by_name("super_admin") 
0

Normalmente ahorro el objeto en alguna variable:

#Setup our default roles 
supr = Role.create(:name => "super_admin") 
schl = Role.create(:name => "school_leader") 
schs = Role.create(:name => "school_staff") 
stut = Role.create(:name => "student") 


#Setup and initial super admin user 
admin = User.create(:first_name => "admin") 
johny = User.create(:first_name => "johny tables") 

continuación, como acabo los empujan en la matriz asociativa:

admin.roles << supr << schl << schs 
johny.roles << stut 

o simplemente puede crearlos cuando se está empujando en el asociativo array, por lo que no habría necesidad de pasar tantas variables alrededor.

Cuestiones relacionadas