您所描述的最大問題是standard_user has_many :deals
,但交易不屬於standard_user;他們可能同時被許多標準用戶使用。這意味着交易不能belong_to
standard_user,因爲您的交易表中不能有standard_user_id
列(因爲您需要任意多列來處理可能參與的任意多個用戶)。
爲了有這樣的多對多關係,您需要一個鏈接表。下面是Rails的實現這一目標的一種方法:
class DealParticipation < ActiveRecord:Base
#This means the deal_participations table has a standard_user_id key
belongs_to :standard_user
#This means the deal_participations table has a deal_id key
belongs_to :deal
#... more logic goes here ...
end
現在標準用戶是這樣的:
class StandardUser < ActiveRecord::Base
has_many :deal_participations
has_many :deals, :through => :deal_participations
# ... more logic goes here ...
end
而且您的交易類看起來像:
class Deal < ActiveRecord::Base
has_many :deal_participations
has_many :standard_users, :through => :deal_participations
belongs_to :admin_user
#... more logic goes here ...
end
然後您就需要三個表格:一個用於deals
,一個用於deal_participations
,另一個用於standard_users
(加上管理員用戶的東西)。
根據您的需要,您可能還想嘗試使用單表繼承(STI)使用戶和管理用戶從一個公共基類派生。你可以閱讀更多關於STI here。
我希望有幫助!享受Rails入門!
我看到什麼用戶表的屬性如下所示:USER_ID/USER_LOGIN/USER_PASSWORD/user_location.I也看到了交易表屬性:deals_name,deals_price ......但我不明白我放入您提到的deals_participations表中。該表的屬性(列)是什麼?如果它們是:deals_participation_id/user_id/deals_id,那麼我的行數等於用戶數量乘以他們參與的交易數量......這可能是巨大的,並且看起來不太有效。我對deal_participation表屬性有錯嗎? – Mathieu 2013-04-24 21:04:13
deals_participations表的列確實是您所描述的。每次用戶參與交易時都有一行。如果您存儲了用戶參與的用戶交易清單(但是如果您這樣做了,則無法查詢),這與您所擁有的數據量完全相同。這個「鏈接表」設計是解決這個問題的標準方法。 – charleyc 2013-04-24 21:14:38
感謝您的回答。我明白。主要的是我需要能夠檢索數據「哪些交易用戶mathieu45(例子)在過去30天參與」爲了定製電子郵件給他。我擔心查詢這個表格將會太長而且效率低下。 – Mathieu 2013-04-25 09:27:19