【问题标题】:Rails version migration issue (Rails 4.2 to 5.0)Rails 版本迁移问题(Rails 4.2 到 5.0)
【发布时间】:2017-02-14 10:19:59
【问题描述】:

从 rails 4.2.6 迁移到 5.0.1 时,我遇到了一些错误:

undefined method `push' for #<User::ActiveRecord_Relation:

在做的时候:

@users = User.includes(:account).order(:last_name)
@users.push(new_user)

【问题讨论】:

  • 这是undefined method push' for # 的完整错误吗?我相信#之后一定有类名。
  • 这是完整行:#<:activerecord_relation:0x0000000aba23b8> 的未定义方法 `push'
  • 您尝试过 Deepak 的回答吗?这应该对你有用。

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


【解决方案1】:

这里要注意的一点是@usersActiveRecord 关系。 ActiveRecord 关系没有这种方法push

Array 支持push 方法,因此您可以将结果转换为数组,然后将new_user 推入生成的`Arraya

@users = User.includes(:account).order(:last_name)
@users.to_a.push(new_user)

【讨论】:

  • 还提到 concat 和 push 的工作方式相同。但 concat 不工作。得到相同的错误。
  • @Deepak Mahakale - 感谢您对此的回答。 @users.to_a.push... 帮助了我。我遇到了同样的问题,并试图将 to_a 添加到我的 new_record 中。
【解决方案2】:

ActiveRecord::Associations::AssociationCollection#push 已从 ActiveRecord 5 变为 deprecated and removed。您可以尝试在推送之前将关系转换为数组:

@users = User.includes(:account).order(:last_name).to_a
@users.push(new_user)

或者在 ActiveRecord 5 中找到类似的方法。例如there is concat method:

@users = User.includes(:account).order(:last_name)
@users.concat([new_user])

【讨论】:

  • 是的,push 方法已被弃用,但如果你能告诉任何其他方法来代替它会很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多