将记录合并到ActiveRecord关系中

时间:2018-12-21 22:15:02

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

我将记录提取为:

def self.imp_broadcast_preview!
  Broadcast.where(for_gamers: true).order(:created_at).last
end

然后在我的控制器中,我有:

def index
  @conversations = Conversation.where(gamer: @gamer)
  @conversations << Broadcast.imp_broadcast_preview!
end

以上代码在Rails 4.2中正常工作,并合并了对话中的最后一条广播消息。我刚刚将代码库更新为Rails 5.2,现在出现错误:

NoMethodError (undefined method `<<' for #<Conversation::ActiveRecord_Relation:0x00007fd2541baca0>)

我尝试改用merge,但由于broadcast不是activerecord relation

,这也会引发错误

1 个答案:

答案 0 :(得分:2)

该功能已在Rails 5.0中删除,您可以检查https://github.com/rails/rails/issues/25906。在那里,您将找到为什么删除了它,以及指向删除了该功能的提交的链接。

要使您的代码正常工作,您应该做的就是将第一个结果转换为数组,这样<<会起作用:

def index
  @conversations = Conversation.where(gamer: @gamer).to_a
  @conversations << Broadcast.imp_broadcast_preview!
end