2013-11-04 250 views
0

這裏有新的rails。我無法理解這個特定的activerecord關聯。有人可以幫助我做到這一點。該模型是這樣的:Ruby on Rails模型關聯

class User < ActiveRecord::Base 
    has_many :client_occurrences, 
      foreign_key: "client_id", 
      class_name: "Occurrence" 
    has_many :requested_occurrences, 
      foreign_key: "requestor_id", 
      class_name: "Occurrence" 
end 

及其關聯的一個是:

class Occurrence < ActiveRecord::Base 
    belongs_to :template, autosave: true 
    belongs_to :requestor, class_name: "User" 
    belongs_to :client, class_name: "User" 
end 

我似乎無法理解協會正在這裏描繪。每次我看到的用戶模型,我立刻把它歸類爲一個問題,因爲這裏是我如何在用戶模式讀取協會:

用戶通過client_occurrences有許多事件別名設置 CLIENT_ID作爲foreign_key

這對我來說是一個問題,因爲foreign_key不在適當的表中(根據我對代碼的理解)。另外,client_id和requestor_id是Occurrence表中的列。

任何人都可以幫忙嗎?

回答

1

我不知道您的問題。我會說你的理解是正確的,即:

  • User確實有很多Occurence S(每個Occurence點回 的User
  • 他們別名/爲client_occurrences從 的User的角度引用foreign_key確實是 client_id
  • 即,Occurence表使用client_id指向 到User

從視圖的Occurrence點:

  • 每個Occurrence屬於:client,這意味着將字段名稱爲client_id(與User型號中的foreign_key子句相匹配)
  • 項目b eing指出,確實是一個User

一個這是令人困惑,我想的事情,就是has_many條款的順序是從相應belongs_to條款的順序不同。

+0

讓我感到煩惱的事情是在用戶模型關聯中。我習慣於正常的關聯,其中當你聲明「belongs_to」方法時,該表通常持有foreign_key – Finks

+0

是的。 'has_many'是不同的。它告訴系統所引用的對象將通過'has_many'聲明指向對象。 –

+0

噢,我明白了,糾正我如果我錯了,那麼你說的是,當你在has_many方法中聲明foreign_key方法時,不是在該表中創建foreign_key,它會告訴系統定義的列是關聯模型的foreign_key? 如果是這樣的話,爲什麼我不能在定義belongs_to方法的模型中定義foreign_key? – Finks

0

這些業務規則我收集來自:

A User can be associated with an Occurrence as a client 

A User can be associated with an Occurrence as a requestor 

A User can be associated to many Occurrences 

An Occurrence has one requestor User, and one client User 

外鍵在用戶模型中指定的,因爲它關聯到同一模型多次,否則軌道會默認使用「USER_ID」爲發生模型中的外鍵。

檢查此鏈接出來的全部細節上什麼都不同ActiveRecord關聯的事: Rails Guides: ActiveRecord Associations

+0

我喜歡你的名字,與我的相匹配。請注意,感謝您的鏈接!我現在發現這種特定的關聯稱爲自我連接。這就像是從我的喉嚨裏拔出一根刺。 – Finks

+0

從頭開始。我真笨。這不是自我加入。但它看起來像:) – Finks

+0

是不是一個自我加入,只有兩個相同的兩個模型之間的連接。該網站充滿了充分解釋的好東西。如果您喜歡,請將答案標記爲正確! – sicks