Mind-boggling problem with update_attributes()

So I'm working on creating a migration for a new version of one of the projects I'm working on. But Rake seems to be selectively spitting out errors. The same code that works only a few lines up will not work where I most need it. (That should be a law of programming...)

So here's what's up. I've got a table that stores information on the roles that users can have. There are four columns: id, name, parent_id, and list_priority. The big key feature that I'm implementing in this release is the concept of permission inheritance across roles. So, what I've done for some roles is the following:

    puts ' -> Remove developer permissions collection'     @developerRole.permissions.delete_all     puts ' -> Set developer parent and list_priority'     @developerRole.update_attributes(:parent_id => @officerRole.id, :list_priority => 5)

The migration handles that fine. However it throws an error on:

    @serviceChair = Role.create :name => 'Service Chair'     @serviceChair.update_attributes(:parent_id => @brotherRole.id, :list_priority => 3)     @serviceChair.permissions << @op_login     @serviceChair.permissions << @op_service_fundraising

The rake error reads as follows:

rake aborted! undefined method `list_priority=' for #<Role id: 5, name: "Service Chair">

And, if I remove list_priority from the update_attributes method in the second code segment, it will throw a similar error about parent_id. Could anyone tell me what the heck is going on here? I'm about at the end of my wits trying to figure this out.

Thanks in advance.

Matt wrote:

    puts ' -> Remove developer permissions collection'     @developerRole.permissions.delete_all     puts ' -> Set developer parent and list_priority'     @developerRole.update_attributes(:parent_id => @officerRole.id, :list_priority => 5)

The migration handles that fine. However it throws an error on:

    @serviceChair = Role.create :name => 'Service Chair'     @serviceChair.update_attributes(:parent_id => @brotherRole.id, :list_priority => 3)     @serviceChair.permissions << @op_login     @serviceChair.permissions << @op_service_fundraising

What (if any) is in between those two sections ? Are you changing the roles table in this migration ? Where does @developerRole come from ?

Fred

The Roles table is being changed in this migration, but I alter the table before I start working with the data. The two code blocks are adjacent. The @developerRole code is immediately above it, and @developerRole is created by

@developerRole = Role.find(:first, :conditions => {:name => 'Developer'})

Which happens immediately after the table alterations.

In case you are modifying the Roles table (and then updating the new fields) you might want to reset the column information.

ModelName.reset_column_information

ModelName is your case might be Role.

That fixed my problem! Thanks!