【问题标题】:Merge record into ActiveRecord Relation将记录合并到 ActiveRecord 关系中
【发布时间】:2018-12-21 22:15:01
【问题描述】:

我拉一条记录为:

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

【问题讨论】:

  • 确实,这已经不可能了。我可以在 Rails 存储库中搜索 PR,但这需要一些时间。尝试在第一行添加.to_a @conversations = Conversation.where(gamer: @gamer).to_a。让我知道这是否适合您。
  • @fanta 是的,效果很好。谢谢!如果您将此添加为答案,那么我一定会接受它

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


【解决方案1】:

Rails 5.0 中删除了该功能,您可以查看https://github.com/rails/rails/issues/25906。在那里你会找到它被删除的原因,以及删除该功能的提交链接。

要使您的代码正常工作,您应该将第一个结果转换为数组,这样&lt;&lt; 将起作用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 2023-04-03
    • 2011-02-13
    相关资源
    最近更新 更多