1

我有一個使用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

這就是爲什麼我從來沒有碰到這種行爲之前結束列約束!

回答

1

這將有助於查看模型以及診斷此問題。

然而,據說,我認爲如果你在這裏使用HABTM協會,這可能是一個好主意,看看有很多直通關係。例如:VenueManagement這將有你的user_idvenue_id。這樣,您可以處理關聯中的其他屬性,如默認標誌。

希望有所幫助。

+0

你說得對,有很多通過會更適合在這種情況下。謝謝! – Simon 2012-03-23 15:31:18

1

由於滑軌似乎拿起標籤的_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