At 9:13 PM -0400 5/10/07, Chris H. wrote:
where is member_role coming from?
also, the save! is not necessary, as the << method saves the data in
the join table.
Hi Chris,
Here’s is the rake task version. member_role is a local variable with
the value of a Role object with the title “member”.
desc “setup_roles for users.”
task :setup_roles => :environment do
anonymous_role = Role.find_or_create_by_title(‘anonymous’)
member_role = Role.find_or_create_by_title(‘member’)
mananger_role = Role.find_or_create_by_title(‘manager’)
author_role = Role.find_or_create_by_title(‘author’)
admin_role = Role.find_or_create_by_title(‘admin’)
User.find(:all).each {|u| u.roles << member_role; u.save! }
anonymous = User.find_by_login(‘Anonymous’)
anonymous.roles.each {|r| r.destroy }
anonymous.roles << anonymous_role
stephen = User.find_by_login(‘stephen’)
stephen.roles << admin_role
end
I added the save! just to see if saving the object to which the
collection is related would make a difference. It didn’t and I should
have deleted it from my example before posting the question.
After running the migration listed below and then running the rake task
listed above I have just two entries in the table roles_users, one for
the anonymous user and one for me. If instead I run these two commands
in script/console:
member_role = Role.find_or_create_by_title(‘member’)
User.find(:all).each {|u| u.roles << member_role }
The new entries are created in the roles_users joint table for all the
users.
Here’s the migration I keep running up and down:
class AddRolesUsers < ActiveRecord::Migration
def self.up
create_table “#{RAILS_APPLICATION_PREFIX}roles_users”, :id => false,
:force => true do |t|
t.column “role_id”, :integer
t.column “user_id”, :integer
end
end
def self.down
drop_table “#{RAILS_APPLICATION_PREFIX}roles_users”
Role.delete_all
end
end
–
- Stephen B.
Concord Consortium, http://www.concord.org