【问题标题】:Guests for events in Ruby on RailsRuby on Rails 活动的嘉宾
【发布时间】:2015-07-22 01:31:59
【问题描述】:

我正在编写一个关于 Rails 的小项目,但我在接近某个点时有点卡住了。

这是一个活动组织平台,注册用户可以在其中创建自己的活动(如社交网络的活动),然后邀请来自平台外部的人而无需注册。我目前正在通过 Devise 管理注册用户,活动部分也已完成,所以现在用户可以注册、登录/退出...并创建活动。

在接近客人部分时,我产生了疑问。我已经尝试创建一个新模型(来宾)并向其添加设计功能,就像我对用户所做的那样,但我无法让它正常工作。

我希望用户能够通过电子邮件邀请客人参加他们的活动,并且平台会为他们生成一个邀请码,以便他们可以使用电子邮件和邀请码的组合登录到该特定活动,以便他们检查活动的信息,并能够告诉主持人他们是否参加活动。

正如我根据我的实体关系建模的那样,客人将是一个弱实体,因为他们完全依赖于活动,所以客人模型本身可以包含出席信息。

所以我的问题是,解决此问题的 RoR 方法应该是什么?我可以使用 Devise 解决这个问题还是有其他更简单的方法?

【问题讨论】:

  • 在我看来,客人和用户是一样的。为什么不在访客接受邀请时创建一个新用户(访客)?
  • @Trigork 我想我已经回答了您的问题,如果您需要帮助,请随时发表评论。
  • 在我多年前用 PHP 实现的这个问题的旧实现中,用户和来宾是相同的,但具有不同的角色。正如我在下面所说的,我想让客人尽可能地依赖于活动,我认为这意味着一种不同的模式。

标签: ruby-on-rails ruby devise


【解决方案1】:

我认为解决此问题的最佳方法是使用像您尝试过的 Guest 模型:

class Guest < ActiveRecord::Base
  belongs_to :user
  belongs_to :event
end

那么您的用户和事件模型将如下所示:

class Event < ActiveRecord::Base

  # the owner of the event
  belongs_to :user
  # an event has 0..n guests coming to it
  has_many :guests, dependent: :destroy
  has_many :saved_users, through: :guests, source: :user

end

class User < ActiveRecord::Base

  # a user has 0..n created events
  has_many :events
  # a user has many guests for those created events
  has_many :guests, dependent: :destroy

  # a user has 0 to n saved guests through the guests table
  has_many :saved_guests, through: :guests, source: :event

  # the rest of the Devise configuration code goes here ...
  # ...
end

我不了解你,但我更喜欢手动创建这些模型,而不是内置方法,这样你就可以真正获得一些巧妙的练习来处理模型之间的关联和关系,请参阅官方指南了解更多信息,有很多,等等:

http://guides.rubyonrails.org/association_basics.html

dependent: :destroy 子句用于确保在您对事件所有者或事件本身调用 destroy 时删除来宾。

【讨论】:

  • 这里的问题是,如何将阵风记录到事件中?
  • 在你的控制器中,它只是'current_user.guests.create(user:user)',或者类似的东西,具体取决于你保存客人的位置。
  • 我说的是类似于 Devise 提供的功能(登录、注销、会话等),但对于客人来说,他们可以登录到活动中,查看它的信息并判断他们是否参加与否。
【解决方案2】:

如果您使用的是 Devise,则只需添加 devise_invitable gem。此 gem 将允许您登录的用户邀请某人。

gem 将为invited users 生成一个邀请令牌和可自定义的视图。

invited user变成real user(当他接受邀请并注册时),他将能够接受活动邀请。

我认为您在这里并不需要Guest 模型。

【讨论】:

  • 问题是我不希望客人必须注册到平台。我想让他们依赖于事件,以便他们的信息对平台尽可能保持匿名。这样,如果事件被删除,他们的信息也会消失。
猜你喜欢
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2014-11-04
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多