将记录合并到 ActiveRecord 关系中
Merge record into ActiveRecord Relation
我拉一条记录为:
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 5.0 中删除,您可以查看 https://github.com/rails/rails/issues/25906。在那里你会找到它被删除的原因,以及删除该功能的提交的 link。
为了使您的代码正常工作,您应该将第一个结果转换为数组,这样 <<
就可以工作了:
def index
@conversations = Conversation.where(gamer: @gamer).to_a
@conversations << Broadcast.imp_broadcast_preview!
end
我拉一条记录为:
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 5.0 中删除,您可以查看 https://github.com/rails/rails/issues/25906。在那里你会找到它被删除的原因,以及删除该功能的提交的 link。
为了使您的代码正常工作,您应该将第一个结果转换为数组,这样 <<
就可以工作了:
def index
@conversations = Conversation.where(gamer: @gamer).to_a
@conversations << Broadcast.imp_broadcast_preview!
end