Mass_ Insert for has_many:通过关联

时间:2016-04-15 17:24:52

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

用户 <>友谊<> 从动

user has_many :followers, through: :friendships
follower has_many :users, through: :friendships

我需要插入最多500,000个“关注者”,我们有很多用户。总共将有几百万粉丝,约有500名用户。

我已经将所有内容删除到一个单独的交易中,这节省了一点时间 - 但是肯定还不够

ActiveRecord::Base.transaction do
  new_usernames.each do |name|
    follower = followers.find_or_create_by! username: name
    # TODO
    # do someting with follower
  end
end

我有想法让它成为一个原始的单一sql语句,类似于:

ìnsert into followers(usernames) values(#{account.followed_by.join(","))

(用户名是唯一的,因此mysql会阻止双重帐户)

显然,我想念所有的协会。然后我想我可以做类似

的事情

DELETE FROM friendships WHERE user_id = 1337 然后再次大量插入所有友谊。

INSERT INTO friendships VALUES (account.followed_by.map{|x| "(1337, #{x})"})

显然,我无法跟踪友谊中的任何其他信息。

还有其他可能吗?

0 个答案:

没有答案