ActiveRecord NoMethodError:nil的未定义方法`association':NilClass

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActiveRecord NoMethodError:nil的未定义方法`association':NilClass相关的知识,希望对你有一定的参考价值。

使用Rails 5.1.4,在使用#find更改has_many以预加载#includes关联之后:

Website.includes(:configured_checks).find(params[:id])

抛出异常:

NoMethodError: undefined method `association' for nil:NilClass
答案

id and x_id need to have the same type

此问题暴露了重命名has_many关系所有者的错误。当表重命名时,关联上的t.belongs_to列的类型不再与它引用的表匹配,从而导致NoMethodError: undefined method 'association' for nil:NilClass

架构不正确:

# Website id here is a UUID:
create_table "websites", id: :uuid, default: -> { "uuid_generate_v4()" }, force: :cascade do |t|
end

# The foreign_key became a binint rather than uuid:
create_table "configured_checks", force: :cascade do |t|
  t.bigint "website_id"
end

迁移后更正了架构:

# Website id here is a UUID:
create_table "websites", id: :uuid, default: -> { "uuid_generate_v4()" }, force: :cascade do |t|
end

# The website_id is now a uuid:
create_table "configured_checks", force: :cascade do |t|
  t.uuid "website_id"
end

以上是关于ActiveRecord NoMethodError:nil的未定义方法`association':NilClass的主要内容,如果未能解决你的问题,请参考以下文章

找不到 id=#<ActiveRecord::Relation::ActiveRecord_Relation_User:0x2eb9b58> 的用户

找不到 ActiveRecord\MysqliAdapter

Castle ActiveRecord学习

activerecord - 时间格式

Castle.ActiveRecord多数据库配置

ruby 令人敬畏的ActiveRecord错误报告脚本。如何在Ruby脚本中使用ActiveRecord和SQLite。