首先,我會強烈建議在協會閱讀回報率指南: 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的命令通過命令行快速設置您的遷移和模型。至於關於如何讓您的關聯處理某些被刪除,保存等內容的選項,只需閱讀頂部的指南即可找到您要查找的內容。
來源
2012-05-23 20:44:05
Ben
謝謝本。唯一讓我感到困惑的是你在Record和Field模型之間建立的HABTM關聯。我很困惑,因爲我認爲一個記錄可以有很多字段,但是每個給定的字段只屬於一個記錄 - 換句話說,當我們談論關聯時,我們是否通過單個實例的角度來查看關聯模型或更一般地通過每個模型的類的角度? (我希望這是有道理的)。 – oort
確實。如果您希望字段對每條記錄都是唯一的,那麼每個字段都屬於記錄,並且記錄has_many字段。出於某種原因,我以爲你想讓每個Field可能連接到不同的記錄。改變它不會以任何方式影響標籤設置,因爲它們仍然可以連接到許多不同的字段,儘管這些字段對記錄是唯一的。希望這可以幫助。 – Ben