如何构建一个独特的数据库模型Ruby on Rails 4

时间:2015-01-13 05:01:21

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我目前有三个模型:支持Devise auth gem的两个不同用户模型:社区组织者和常规用户,以及一个社区活动模型。

我试图让社区组织者创建活动:

  • 哪些用户可以捐款;
  • 哪些用户可以参加。

我使用stripe作为支付网关。到目前为止,我已为Event模型设置了控制器/模型支架:

class Event < ActiveRecord::Base
  extend FriendlyId
  friendly_id :title, use: :slugged
  belongs_to :org_user #organization_user
  has_one :category
end

以下是我的组织用户模型:

class OrgUser < ActiveRecord::Base
  extend FriendlyId
  friendly_id :username, use: :slugged
  has_many :posts
  has_many :comments
  has_many :events
 end

我被告知我可能需要在我的事件和org_user模型中使用这些特定模式

   class Event < ActiveRecord::Base
    event has_many :attendances
    event has_many :users, through: :attendances
   end

  class OrgUser < ActiveRecord::Base
    org_user has_many :attendances
    org_user has_many :events, through: :attendances
    end

class User < ActiveRecord::Base
end

您对建立这种关系有何建议?我也不想忘记User.rb,它会将表单签名为:org_user发布的事件的一部分。
只有org_user才能创建/发布事件。普通用户可以访问注册表单以参加这些事件。请帮我澄清这个障碍。

1 个答案:

答案 0 :(得分:2)

有几件事:

  • 你正确的方式有很多通过关系是错误的(见the doc
  • 您不会建立从用户到活动的捐赠关系模型

你可以模仿这样的事情:

  class Event < ActiveRecord::Base
    has_many :attendances
    has_many :users, through: :attendances
  end

  class OrgUser < ActiveRecord::Base
    has_many :events # as coordinations
  end

  class User < ActiveRecord::Base
    has_many :donations
    has_many :attendances
  end

  class Attendance < ActiveRecord::Base
    belongs_to :user
    has_one :event
  end

  class Donation < ActiveRecord::Base
    belongs_to :user
    has_one :event
  end