Rails 5.0 到 5.1 - 一对多关联上的“Cant cast Hash”

Posted

技术标签:

【中文标题】Rails 5.0 到 5.1 - 一对多关联上的“Cant cast Hash”【英文标题】:Rails 5.0 to 5.1 - 'Cant cast Hash' on one-to-many association 【发布时间】:2017-07-28 23:12:43 【问题描述】:

我正在将我的应用程序从 rails 5.0 迁移到 5.1,并且在访问关联模型时收到错误“Cant cast Hash”(在 5.0 中一切正常)。

sighting.rb:

belongs_to :species, :class_name => 'Species', :foreign_key => 'species_id'
belongs_to :site, :class_name => 'Site', :foreign_key => 'site_id'
belongs_to :creator, :class_name => 'User', :foreign_key => 'creator_id'
belongs_to :spotter, :class_name => 'User', :foreign_key => 'spotter_id'

species.rb:

has_many :sightings, :class_name => 'Sighting', :foreign_key => 'species_id', :dependent => :restrict_with_exception

site.rb:

has_many :sightings, :class_name => 'Sighting', :foreign_key => 'site_id', :dependent => :restrict_with_exception

在控制台(已播种数据库):

Sighting.find(1).site

返回正确的站点模型。

Sighting.find(1).species

另一方面返回错误

TypeError: can't cast Hash

两个关联模型(以及用户模型 - 未显示)都以相同的方式设置。正如我所说,如果我恢复到 rails 5.0,一切都会再次正常运行。

【问题讨论】:

【参考方案1】:

这很像https://github.com/rails/rails/issues/29299中描述的问题

已修复已合并到5-1-stable 分支 https://github.com/rails/rails/pull/29058

您可以等待v5.1.4 或者您可以在 Gemfile 中加载该分支

gem 'rails', github: 'rails/rails', branch: '5-1-stable'

【讨论】:

以上是关于Rails 5.0 到 5.1 - 一对多关联上的“Cant cast Hash”的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails,一对多关联(One-to-Many)

ruby on rails(model)

如何根据 Rails 中的其他对象验证多对多关联?

未初始化的常量 Faker::Date 更新到 rails 5.1

MyBatis框架关联映射

在 ruby​​ on rails 中以一对多关系创建新记录