Rails – 2种用户类型的应用程序设计

我在rails应用程序上写ruby,它将有2种不同类型的用户(让我们说卖家和买家)。 我正在考虑使用单表inheritance,但最终我决定创建两个独立的模型(我认为这是我的情况下更好的解决方案)。

问题是当我尝试创建私人消息模型时(卖家和买家都可以互相联系)。 通常我只生成带有3个字段的模型称为消息(from_user_id to_user_id和content)。 这在我的情况下不起作用,因为可能有2个用户具有相同的ID(1个卖家和1个买家)。

我正在考虑使用电子邮件来识别发件人和收件人,但电子邮件不是我的主要密钥,所以我想我将无法在邮件模型中使用它作为外键。 哦 – 顺便说一下,确保电子邮件在卖家和买家表中都是独一无二的最佳方法是什么(换句话说,用户不能通过一封电子邮件作为卖家和买家加入)

我有什么想法可以优雅地解决我的问题?

您正在寻找的是多态关联。 这允许您做的是通过指定ID以及另一个对象的Class,使模型可以通过相同的关系属于多个其他模型。 例如,如果买方ID 3向卖家ID 5发送消息,则您的消息表将最终显示如下行:

sender_id = 3 sender_type = Buyer receiver_id = 5 receiver_type = Seller 

要在活动记录中完成此操作,您的模型将如下所示:

 class Message < ActiveRecord::Base belongs_to :sender, :polymorphic => true belongs_to :receiver, :polymorphic => true end class Buyer < ActiveRecord::Base has_many :sent_messages, :class_name => "Message", :as => :sender has_many :received_messages, :class_name => "Message", :as => :receiver end class Seller < ActiveRecord::Base has_many :sent_messages, :class_name => "Message", :as => :sender has_many :received_messages, :class_name => "Message", :as => :receiver end 

为什么你决定没有一个用户模型? 考虑到将这些用户分成两个独立表所引起的所有问题,我将拥有一个用户模型,并将此模型扩展为具有买方模型和卖方模型。

我认为买家或卖家仍然是您的应用程序的用户,这也解决了从用户到另一个用户的消息问题。

 class User < ActiveRecord::Base # Remember to add a "type" column in the users table end class Seller < User end class Buyer < User end 

现在消息在用户之间,无论哪种用户。