Mel*_*emi 6 ruby activerecord ruby-on-rails activerecord-relation
愚蠢的问题,但我不确定为什么这会在 Rails 4.2 中起作用,但在 Rails 5.2 中不起作用。
FamilyCharacteristic.where(family_id: @user.family_ids)
.concat(@user.characteristics)
Run Code Online (Sandbox Code Playgroud)
规范在 5.2 中失败:
Failure/Error:
FamilyCharacteristic.where(family_id: @user.family_ids)
.concat(@user.characteristics)
NoMethodError:
undefined method `concat' for #<ActiveRecord::Relation []>
Did you mean? count
Run Code Online (Sandbox Code Playgroud)
concat 是从ActiveRecord::Relation5.2 中删除的还是FamilyCharacteristic.where(family_id: @user.family_ids)在 < 4.2 中是不同的对象?
谢谢你的帮助。
我做了一些挖掘,发现:
FamilyCharacteristic.where(family_id: @user.family_ids)班级没变,还是 ActiveRecord::RelationRelation没有也仍然没有定义自己的concat方法,但是它被委托给Array#concat直到这个提交发生,所以在 Rails 4.2 SomeModel.where(id: ids).concat(some_records)(它返回一个Array)实际上是一样的SomeModel.where(id: ids).to_a.concat(some_models)ActiveRecord::Delegation用Rails 5.2,唯一的方法委托给Array在此模块中指定的那些并且concat不在其中总而言之 -concat从你的例子来看,它从未属于ActiveRecord但被委托给它Array#concat,这就是它起作用的原因。它不再在 Rails 5 中委托,所以它抛出NoMethodError.
| 归档时间: |
|
| 查看次数: |
1888 次 |
| 最近记录: |