2014-01-30 52 views
1

我正致力於一個控制設備借用給用戶的項目。模型關聯:在哪裏放置foreign_key

它顯示貸款視圖,呈現一個表單,用戶可以通過選擇框選擇他/她想要的設備。如果設備在選擇框中不可用,用戶必須註冊設備,然後它會出現在在借閱視圖的表單中選擇該框。

模特協會:

貸款的has_many設備

設備belongs_to的貸款

的疑問是: 如果設備belongs_to的貸款,然後我必須把lending_id的設備。

但是,如果用戶訪問新設備視圖並嘗試註冊新設備,它將會錯過lending_id 。

我該如何解決這個問題?

+0

請給出更多關於您的模型的信息,具體來說,「貸款」項目代表什麼?另外:一個全新的項目不會借給任何人,是嗎? – mellowfish

+0

假設有人想借用'hp筆記本電腦',他將訪問Lending表單並在選擇框中選擇hp筆記本電腦,並且有更多信息,例如用戶名,設備品牌,設備類別(我傾向於簡化問題是因爲問題出在上面的關聯中),那麼他只是註冊貸款。一個新設備不會借給任何人。 –

+0

我想你可能會把你的角色顛倒過來:一件設備可能會被借出很多次,但每次「借出」只是一件事。鑑於此,equipment_id和user_id都屬於貸款,借貸成爲設備和用戶之間的多對多關係。 – mellowfish

回答

1

我的猜測是你真正想要的是貸款是用戶到設備的多對多映射。

class User < ActiveRecord::Base 
    has_many :lendings 
    has_many :equipments, :through => :lendings 

    # etc 
end 

class Equipment < ActiveRecord::Base 
    has_many :lendings 
    has_many :users, :through => :lendings 

    # etc 
end 

class Lending < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :equipment 

    # etc 
end 

您可以編寫方法,通過最新的主動放貸,反之亦然給一個設備的「當前」的用戶,再加上你有裝備的一個項目的所有身外之物的便利歷史。

+1

明白了!謝謝! –