Rails迁移假设没有关系

问题描述:

我有一个使用User模型和Venue模型的Rails 3.1应用程序。这两种模式具有HABTM的关系 - 用户可以管理许多场地,场地可以由许多用户管理。Rails迁移假设没有关系

我希望用户能够选择默认的场地,所以我想一个default_venue_id属性添加到User与以下迁移:

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 

的问题是,当我运行迁移对我的PostgreSQL数据库,它假设default_venue_id是与不存在的default_venues表关系的外键,引发以下错误:

PGError: ERROR: relation "default_venues" does not exist 
: ALTER TABLE "users" ADD FOREIGN KEY ("default_venue_id") REFERENCES "default_venues" ("id") 

我应该是否正在做一些事情来告诉数据库我没有试图建立一种关系,或者我会以错误的方式去做这件事?

编辑:我刚刚意识到,谁该项目的工作另一家开发商加入schema_plus宝石自动定义了_id

这就是为什么我从来没有碰到这种行为之前结束列约束!

这将有助于查看模型以及诊断此问题。

然而,据说,我认为如果你在这里使用HABTM协会,这可能是一个好主意,看看有很多直通关系。例如:VenueManagement这将有你的user_idvenue_id。这样,您可以处理关联中的其他属性,如默认标志。

希望有所帮助。

+0

你说得对,有很多通过会更适合在这种情况下。谢谢! – Simon 2012-03-23 15:31:18

由于滑轨似乎拿起标签的_id部分,并试图将其链接到一个表中,最简单的办法,以这个作为惯例说,与_id链接到一个表中的字段以不同的方式尝试将其命名为。其中

一个例子可以 :default_id_for_venue,或者只是:defualt_venue

+0

谢谢,我怀疑这可能是由_id引起的,但这并不是我以前遇到过的。 – Simon 2012-03-23 15:30:37

+0

有没有办法告诉Rails不要链接到表?一个不太容易的解决方案?例如owner_id始终是用户标识。 – kbighorse 2013-04-10 01:46:41