Ruby on rails rails 5有许多模式

Ruby on rails rails 5有许多模式,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,在Rails 5中,我的模型设置如下: User has_many :events, :through => :participants Event has_many :participants has_many :users, :through => :participants Participant belongs_to :user belongs_to :event 当我创建一个事件时,我发送了用户ID,并创建了一个新的参与者 但是,现在当我想

在Rails 5中,我的模型设置如下:

User
has_many :events, :through => :participants
Event
    has_many :participants
    has_many :users, :through => :participants
Participant
    belongs_to :user
    belongs_to :event
当我创建一个事件时,我发送了用户ID,并创建了一个新的参与者

但是,现在当我想要创建一个新事件时,可能还没有创建一个特定的用户

检查用户是否不存在,然后在将用户id添加到事件之前创建所述用户的好模式是什么

user=user.find\u或\u create\u by email:email
event.users自定义验证如何:

event.rb
validate :has_users

def has_users
  errors.add(:base, 'add at least one user') if self.users.blank?
end
检查用户是否不存在的良好模式

为此,有find_或initialize_by和find_或create_by方法

如果用户通过电子邮件订阅:

event.users.find_or_create_by(email: email)

这将找到或创建一个用户,然后订阅一个活动。

一个建议,使用through::participants而不是through=>:participants在哪里可以发生这种情况?哪个模型回调?这取决于应用程序的逻辑。您始终可以在控制器中执行此操作,因为在控制器中有一些参数,可以根据这些参数确定用户是否存在。如果逻辑对于控制器操作来说过于复杂,我建议将其移动到服务对象中。但是我不想把逻辑放到模型回调中顺便说一句,我更新了我的答案。我记得,find_或create_by可以直接在协会上调用。