2017-05-24 81 views
0

我正在學習Rails,我正在練習練習關聯和遷移文件。試圖與Rails建立關聯

目前,試圖在用戶,拍賣物品和出價之間建立模型。

到目前爲止的遷移文件,我有以下幾點:

class CreateItem < ActiveRecord::Migration 
     def change 
     create_table :auction do |t| 
      t.string :item_name 
      t.string :condition 
      t.date :start_date 
      t.date :end_date 
      t.text :description 

     t.timestamps 
    end 
    end 
end 


class CreateBids < ActiveRecord::Migration 
    def change 
    create_table :bids do |t| 
     t.integer :user_id 
     t.integer :auction_id 

     t.timestamps 
    end 
end 
end 


    class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 
     t.string :email 
     t.string :username 
     t.string :password_digest 

     t.timestamps 
    end 
    end 

這些是以下型號:

class Bid < ActiveRecord::Base 
    belongs_to :bidder, class_name: "User", foreign_key: "bidder_id" 
    belongs_to :auction 
end 


class User < ActiveRecord::Base 
    has_many :bids 
    has_many :auctions, :foreign_key => 'bidder_id' 

    has_secure_password 
end 


class Auction < ActiveRecord::Base 
    belongs_to :seller, class_name: "User", foreign_key: :user_id 
    has_many :bids 
    has_many :bidders, through: :bids 
end 

任何建議或意見?我目前正在嘗試測試表格,但拍賣似乎沒有工作...... 具體而言,我的拍賣表似乎無法找到user_id,因此用戶沒有任何拍賣。

+1

「拍賣」有什麼? 'bidder_id'在哪裏?不應該是'user_id'嗎? –

+0

是的,我剛剛刪除了'bidder_id'並將其替換爲'user_id',它現在似乎正在工作,只是希望其餘的很好。 – user7496931

+0

已發佈答案將其包裝..如果還有其他問題,您可以搜索/發佈另一個問題。 –

回答

0

foreign_key指的是_id(默認情況下)或任何用於關聯模型的唯一屬性。

我看不到bidder模型,您需要將它們替換爲user_id,因爲它們與user模型相關聯。

參考更多詳細信息belongs_to

0
class CreateBids < ActiveRecord::Migration 
    def change 
    create_table :bids do |t| 
     t.integer :user_id **do not think this is correct** 
     t.integer :auction_id **or this one** 

     t.timestamps 
    end 
end 
end 

你想用的東西沿着以下

class CreateGames < ActiveRecord::Migration[5.0] 
    def change 
    create_table :games do |t| 
     t.integer :total_time 
     t.references :version, foreign_key: true **#this is how a foreign key should be declared** 
     t.integer :total_points 

     t.timestamps 
    end 
    end 
end 

線條更或者,如果你想改變在未來的遷移,你可以隨時添加的東西參考:

def change 
    add_reference :levels, :version, foreign_key: true 
    end