2012-06-16 103 views
2

我正在嘗試在Rails中建立兩個模型之間的關係,但我無法弄清楚我需要在遷移中做什麼。任何幫助深表感謝。Rails has_one和belongs_to遷移?

我希望每個企業都有類型/類別,例如「汽車」或「餐廳和酒吧」。

Business.rb:

class Business < ActiveRecord::Base 
    has_one :category, :foreign_key => "cid" 
    attr_accessible :description, :email, :facebook, :foursquare, :google, :manager, 
    :mobile, :name, :phone, :url, :yelp 
end 

Type.rb:

class Type < ActiveRecord::Base 
    attr_accessible :cid, :category 
    belongs_to :business 
end 

CreateTypes遷移文件:

class CreateTypes < ActiveRecord::Migration 
    def change 
    create_table :types do |t| 
     t.integer :cid 
     t.string :category 
     t.references :business 

     t.timestamps 
    end 
    add_index :types, :cid 
end 
end 

CreateBusinesses遷移文件:

class CreateBusinesses < ActiveRecord::Migration 
    def change 
    create_table :businesses do |t| 
     t.string :name 
     t.string :url 
     t.string :phone 
     t.string :manager 
     t.string :email 
     t.boolean :mobile 
     t.boolean :foursquare 
     t.boolean :facebook 
     t.boolean :yelp 
     t.boolean :google 
     t.text :description 
     t.integer :cid 

     t.timestamps 
    end 
    end 
end 

回答

3

這對您來說最容易遵守rails命名約定。如果我得到了正確的答案,一個企業就屬於一個類型/類別。讓業務參考類型。在業務端添加belongs_to,在類型/類別端添加has_many。大致如下:

class Business < ActiveRecord::Base 
    attr_accessible :description, :email, :facebook, :foursquare, :google, :manager, :mobile, :name, :phone, :type_id, :url, :yelp 
    belongs_to :type 
end 

class Type < ActiveRecord::Base 
    has_many :businesses 
end 

class CreateTypes < ActiveRecord::Migration 
    def change 
    create_table :types do |t| 
     t.string :category 

     t.timestamps 
    end 
    end 
end 

class CreateBusinesses < ActiveRecord::Migration 
    def change 
    create_table :businesses do |t| 
     t.string :name 
     t.string :url 
     t.string :phone 
     t.string :manager 
     t.string :email 
     t.boolean :mobile 
     t.boolean :foursquare 
     t.boolean :facebook 
     t.boolean :yelp 
     t.boolean :google 
     t.text :description 
     t.integer :type_id 

     t.timestamps 
    end 
    end 
end 
+0

這是有道理的,但我如何驗證它正在工作? – Slicekick

+0

我redid遷移,但我應該'attr_accessible:category'添加到我的類型模型,以便我可以創建類別,對不對? – Slicekick

+0

在定義模型並遷移數據庫之後,您可以簡單地運行rails c並嘗試創建模型和關聯:t = Type.create; b = t.businesses.create; b.type == t – davidrac

0

您的businesses表必須具有整數字段cid,因爲它將其設置爲外鍵。您的types表格不得有cid字段。 types.id字段將用於創建關係。請注意,belongs_to方法沒有foreign_key選項,您應該將其從通話中刪除。

我可以建議你不要無緣無故改變外鍵名稱。如果您不指定外鍵,則默認爲type_id

+0

我有點理解你在說什麼。我將編輯我的原始文章,反映對我的文件所做的更改。儘管如此,我仍然沒有100%清楚,所以我希望有進一步的闡述。 – Slicekick

+0

你有哪個錯誤? –

+0

我沒有錯誤,但是如何檢查該關聯是否正常工作? – Slicekick