我有一个带有User
模型和Venue
模型的Rails 3.1应用。这两个模型具有HABTM关系 - 用户可以管理许多场所,并且场地可以由许多用户管理。
我希望用户能够选择默认地点,因此我尝试通过以下迁移向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
表的关系的外键,并引发以下错误:< / p>
PGError: ERROR: relation "default_venues" does not exist
: ALTER TABLE "users" ADD FOREIGN KEY ("default_venue_id") REFERENCES "default_venues" ("id")
我应该做些什么来告诉数据库我不是想创建一个关系,还是我错了?
编辑:我刚刚意识到另一位参与该项目的开发人员添加了schema_plus gem,它自动为以_id
这就解释了为什么我以前从未遇到过这种行为!
答案 0 :(得分:1)
查看模型以及诊断此问题会很有帮助。
然而,话虽如此,我认为如果你在这里使用HABTM
关联,那么看看有很多关系可能是个好主意。例如VenueManagement
,这将包含您的user_id
和venue_id
。这样你就可以在有意义的关联上处理额外的属性,比如默认标志。
希望有所帮助。
答案 1 :(得分:1)
由于Rails似乎接受了标记的_id部分并尝试将其链接到表,因此对此的简单解决方法是尝试将其命名为不同,因为惯例表示_id链接到表的字段。
其中一个例子可能是
:default_id_for_venue
,或:defualt_venue