2012-05-22 83 views
0

我有一個記錄模型,我想創建一個字段模型,使給定的記錄has_many字段。同樣,我希望每個字段都與一個標籤相關聯,以便每個字段has_one標記。但是每個標籤可以在Field對象之間重複使用多次。正確的關係模型之間的軌道3

在這種情況下,我只是說一個標籤belongs_to_many字段?同樣地,說實地belongs_to_many記錄是否正確?

(最後我想記錄對象是多個字段的容器我設想有一個表格,我可以動態地添加新的字段和標籤,從而使記錄可能看起來像:

Record 1 
    Tag 1 
    Field 1 
    Tag 2 
    Field 2 
    ... 

哪裏每個標籤都可以從現有的游泳池中拉出或者在飛行中創建)感謝您的幫助!

回答

0

首先,我會強烈建議在協會閱讀回報率指南: http://guides.rubyonrails.org/association_basics.html

無論你是新的或需要修補一下RoR中使用關聯,閱讀該手冊。

你的問題似乎更多的是邏輯問題,但我會用它的 代碼開始:

class Record < ActiveRecord::Base 
    has_and_belongs_to_many :fields 
... 

class Field < ActiveRecord:Base 
    has_and_belongs_to_many :records 
    belongs_to :tag 
... 

class Tag < ActiveRecord:Base 
    has_many :fields 
... 

每個記錄連接到許多不同的領域,而每個領域連接到許多不同的記錄。這是多對多關聯的典型例子。實際使用這些模型時,代碼中的邏輯是使Record Model看起來像一個容器(因爲從技術上講,你可以說Field是許多記錄的容器)。

每個字段將有1個標籤與其關聯,但同一個標籤可以與任意數量的字段一起使用(您可以說字段是重複使用標籤)。這是一對多的協會。在建立連接時,您可以在Field模型中使用belongs_to,在Tag模型中使用has_many。

由於標記已連接到字段模型,因此您正在查找的邏輯:記錄是字段和標記的容器,對於此設置很有意義。

這裏是獲取記錄在標籤內的一個簡單的例子:

#Returns the Tag Associated with the first field 
#"inside" the first Record in the database. 

Record.first.fields.first.tag 

同樣,人們可以很容易地走向相反的方向:

Tag.first.fields.first.records.first 


確保充分利用Rails的命令通過命令行快速設置您的遷移和模型。至於關於如何讓您的關聯處理某些被刪除,保存等內容的選項,只需閱讀頂部的指南即可找到您要查找的內容。

+0

謝謝本。唯一讓我感到困惑的是你在Record和Field模型之間建立的HABTM關聯。我很困惑,因爲我認爲一個記錄可以有很多字段,但是每個給定的字段只屬於一個記錄 - 換句話說,當我們談論關聯時,我們是否通過單個實例的角度來查看關聯模型或更一般地通過每個模型的類的角度? (我希望這是有道理的)。 – oort

+0

確實。如果您希望字段對每條記錄都是唯一的,那麼每個字段都屬於記錄,並且記錄has_many字段。出於某種原因,我以爲你想讓每個Field可能連接到不同的記錄。改變它不會以任何方式影響標籤設置,因爲它們仍然可以連接到許多不同的字段,儘管這些字段對記錄是唯一的。希望這可以幫助。 – Ben