您所描述的最大问题是standard_user has_many :deals
,但交易不属于standard_user;它们可能同时被许多标准用户使用。这意味着交易不能belong_to
是标准用户,因为您的交易表中不能有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
然后,您将需要三个表:一个 for deals
、一个 fordeal_participations
和一个 for standard_users
(加上管理员用户的东西)。
根据您的需要,您可能还想尝试使用单表继承 (STI) 来使用户和管理员用户从一个公共基类派生。您可以在此处阅读有关 STI的更多信息。
我希望这会有所帮助!享受 Rails 入门吧!