0

我正在构建一个日常交易应用程序来更好地学习 Ruby on Rails。

在 M. Hartly 教程中,我理解了模型的概念及其关系(一个微博属于_一个用户,一个用户拥有_许多微博)。

但是,我不确定如何在我的日常交易项目中将其付诸实践。

我决定为具有两种不同权限的用户创建一个模型:

  • 可以创建/更新/编辑/删除交易的管理员用户

  • 可以查看交易的标准用户,如果他们发现一个有趣的人参与交易

两个用户都进入用户数据库

我还决定建立一个交易模型并进入交易数据库所以我理解得很好:

  • 一个 admin_user has_many 交易

  • 交易属于 admin_user

  • standard_user 有很多交易(他确实可以参与很多交易)

  • 并且交易不属于standard_user,所以我不能在这里说什么。

我理解正确了吗?可以根据用户的权限类型定义与模型对象的不同关系(在这种情况下:交易)

PS:我想我会用 cancan gem 将用户分开,以赋予他们不同的权利

4

2 回答 2

2

您所描述的最大问题是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 入门吧!

于 2013-04-23T21:06:01.427 回答
0

假设每笔交易都与单个 admin_user 相关联,那么我认为您的前三个项目符号是正确的。但是,对于第四个项目符号,您可以使用 has_many :through 或 has_and_belongs_to_many 来建模 standard_user 和 deal 之间的关系,如本Rails 指南中所述。在后一种情况下,standard_user 与交易的 has_many 关系将更改为 has_and_belongs_to_many。

至于使用 User 子类来定义关系,是的,您可以这样做,但请参阅http://guides.rubyonrails.org/association_basics.html了解有关此方法的一般讨论。

皮特

于 2013-04-23T21:15:46.860 回答