Как добавить информацию о JOIN в файл rails seeds.rb? - PullRequest
6 голосов
/ 02 мая 2011

Я пытаюсь создать файл seed.rb для добавления первоначального пользователя-администратора в базу данных. У меня есть таблица пользователей и модель, а также таблица ролей и модель. У меня есть таблица соединений, role_users, чтобы присоединиться к роли пользователя и разрешениям. Вот схема:

  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

Я выяснил, как добавить пользователей и роли, используя репсективные модели для каждой:

#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 => "admin@domain.com", :password => "admin")

Как добавить объединение, чтобы предоставить привилегии администратора super_admin (используется база данных sqlite3)?

Ответы [ 2 ]

3 голосов
/ 02 мая 2011

Предполагая, что вы определили ассоциацию has_and_belongs_to_many в своей модели пользователя:

has_and_belongs_to_many :roles, :join_table => "roles_users"

В своем файле seed.rb вы можете добавить роли пользователю, как показано ниже (в этом примере пользователю добавлены ВСЕ роли):

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

Чтобы предоставить пользователю только роль 'super_admin', вы можете сделать что-то вроде этого:

u = User.create(:first_name => "admin", :email => "admin@domain.com", :password => "admin")
u.roles << Role.find_by_name("super_admin")
0 голосов
/ 24 января 2016

Обычно я сохраняю объекты в некоторую переменную:

#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")

тогда, когда я просто помещаю их в ассоциативный массив:

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

Или вы можете просто создать их, когда помещаете их в ассоциативный массив, чтобы не было необходимости передавать так много переменных.

...