2010-06-21 177 views
6

我想創建一個擴展ActiveRecord :: Base的模型'Relation',將其表名設置爲'questions_tags',並且沒有主鍵。我該怎麼辦?如何在沒有主鍵的情況下創建模型

class Relation < ActiveRecord::Base 
    set_table_name 'questions_tags' # set table name, right? 

    # how to define 'no-pk'? 

end 

UPDATE


嗨,夥計們。我知道使用'create_table'可以解決這個問題,但這正是我想知道的:create_table(:id=>false)背後的魔法是什麼?如何在不使用create_table(:id=>false)的情況下獲得相同的效果?

+1

據我沒有魔法。 'create_table'有一個額外的選項,不管是否必須創建'id'-列。就這樣。當你要求「魔法」時:你的意思是代碼,生成的sql語句,還是別的......? – nathanvda 2010-06-21 13:07:53

+1

如果你想知道幕後發生了什麼,我會建議在Rails API文檔中挖掘depper: http://api.rubyonrails.org/classes/ActiveRecord/Base.html, http:// api .rubyonrails.org/classes/ActiveRecord/Migration.html, http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – auralbee 2010-06-21 13:27:51

+0

@ nathanvda,auralbee:謝謝你們倆。我剛接觸rails,也許我需要閱讀更多關於ActiveRecord的文章。 – Freewind 2010-06-22 03:18:47

回答

8

創建遷移,看起來像這樣:

class CreateQuestionsTags < ActiveRecord::Migration 

    def self.up 
    create_table :questions_tags, {:id => false, :force => true} do |t| 
    ... 
    t.timestamps 
    end 
    end 

    def self.down 
    drop_table :questions_tags 
    end 

end 
+0

感謝您的回答。請看我更新的問題 – Freewind 2010-06-21 12:25:08

1

如果您希望創建數據透視表,因爲它看起來像表名,那麼AR會在後臺處理它。

但是,如果你正在尋找創造更多精密組件則表: 1)重命名錶「關係基本」請 2)使用一個主鍵「ID」

有沒有很好的理由不要在表格中使用主鍵,而且很可能以後您很可能會後悔自己。

+0

謝謝。請看我更新的問題,我只想知道發生了什麼。 – Freewind 2010-06-21 12:26:37

-7

爲什麼你不想PK?

活動記錄預計PK,我不明白它可以做什麼傷害。

+0

謝謝。因爲它是一個連接表,我不希望它有一個PK – Freewind 2010-06-21 12:25:37

+3

如果你正在創建遺留數據庫映射,那很好,但在ActiveRecord模式/設計中的連接表有主鍵。這是一個可以讓你的生活變得更輕鬆或者不斷對抗的慣例。 – nessur 2012-04-18 19:05:26

+3

有很多時候你不會想要一個主鍵。在基於非主鍵列進行大量插入和讀取的報表上,您可能需要儘可能少的索引。有一個主鍵列,你不會使用除了慢插入。 – WattsInABox 2012-06-15 18:24:03

相關問題