I have a Rails 3.1 app with a User model and a Venue model. These two models have a HABTM relationship – A user may manage many venues and a venue may be managed by many users.
I’d like users to be able to select a default venue so I’m trying to add a default_venue_id attribute to User with the following migration:
class AddDefaultVenueIdToUser < ActiveRecord::Migration
def self.up
add_column :users, :default_venue_id, :integer
end
def self.down
remove_column :users, :default_venue_id
end
end
The problem is that when I run that migration against my PostgreSQL database, it’s assuming that default_venue_id is the foreign key for a relationship with the non-existent default_venues table and throws the following error:
PGError: ERROR: relation "default_venues" does not exist
: ALTER TABLE "users" ADD FOREIGN KEY ("default_venue_id") REFERENCES "default_venues" ("id")
Should I be doing something to tell the database that I’m not trying to create a relationship or am I going about this the wrong way?
Edit: I’ve just realised that another developer who worked on the project added the schema_plus gem which automatically defines constraints for columns ending in _id
That explains why I’ve never run into this behaviour before!
It would be helpful to see the Models as well to diagnose this problem.
However with that being said, I think that if you are using
HABTMassociations here it might be a good idea to take a look at a has many through relationship. example:VenueManagementwhich would have youruser_idandvenue_id. That way you could handle extra attributes on the association where it makes sense, like a default flag.Hope that helps.