gpt4 book ai didi

ruby-on-rails - 在 Rails 中更高效地查找或创建多条记录

转载 作者:数据小太阳 更新时间:2023-10-29 07:12:24 24 4
gpt4 key购买 nike

我有一个应用需要发送用户事件邀请。当用户邀请 friend (用户)参加事件时,如果尚不存在将用户连接到该事件的新记录,则会创建该记录。我的模型由用户、事件和 events_user 组成。

class Event
def invite(user_id, *args)
user_id.each do |u|
e = EventsUser.find_or_create_by_event_id_and_user_id(self.id, u)
e.save!
end
end
end

用法

Event.first.invite([1,2,3])

我不认为以上是完成我的任务的最有效方法。我设想了一种方法,例如

 Model.find_or_create_all_by_event_id_and_user_id

但一个不存在。

没有验证的模型

class User 
has_many :events_users
has_many :events
end
class EventsUser
belongs_to :events
belongs_to :users
end
class Event
has_many :events_users
has_many :users, :through => :events_users
end

最佳答案

首先获取所有现有记录然后创建所有缺失的记录可能会更快:

class Event
def invite(user_ids, *args)
existing_user_ids = event_users.where(user_id: user_ids).pluck(:user_id)
(user_ids - existing_user_ids).each do |u|
event_users.create(user_id: u)
end
end
end

如果所有 event_users 都已经存在,那么您只需进行 1 次查询。但是,如果不存在 event_users,此方法会执行额外的查询 - 与每个 EventUser 创建所需的查询数量相比。

关于ruby-on-rails - 在 Rails 中更高效地查找或创建多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5161958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com