ruby-on-rails - 与 .include 一起使用时,对象不支持 #inspect

标签 ruby-on-rails nomethoderror

所以我遇到了一个令人讨厌的错误,我什至不知道如何调试。我对 Rails 还很陌生,所以这彻底让我大吃一惊。当我在 Student 查找中使用 .includes(:school) 时,它会返回 nilClass 错误,但是当我通过任何其他模型查找时 .includes(:school) code>,学校表现很好。

class Student < ActiveRecord::Base
    has_many :relationships, foreign_key: "liker_id", dependent: :destroy  
    has_many :matches, foreign_key: "student_1_id", dependent: :destroy  
    belongs_to :school  
    belongs_to :conference  
    belongs_to :would_you_rather  
    belongs_to :hometown  
    belongs_to :year  
    belongs_to :major  
end

class School < ActiveRecord::Base
      belongs_to :conference
      belongs_to :rival, class: "School", foreign_key: "rival_id"
      has_many :students
end

在控制台

d = Student.where(:id => '1').includes(:school)

生成 SQL

SELECT "schools".* FROM "schools" WHERE "schools"."id" IN (1)

返回错误消息

NoMethodError: undefined method `each' for nil:NilClass
from /.rvm/gems/ruby-2.1.2/gems/activerecord4.1.1/lib/active_record/associations/preloader/association.rb:87:in `block in associated_records_by_owner'
from /.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.1/lib/active_record/associations/preloader/association.rb:86:in `each'
from /.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.1/lib/active_record/associations/preloader/association.rb:86:in `associated_records_by_owner'
from /.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.1/lib/active_record/associations/preloader/singular_association.rb:9:in `preload'
from /.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.1/lib/active_record/associations/preloader/association.rb:20:in `run'
from /.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.1/lib/active_record/associations/preloader.rb:136:in `block (2 levels) in preloaders_for_one'
from /.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.1/lib/active_record/associations/preloader.rb:134:in `each'
from /.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.1/lib/active_record/associations/preloader.rb:134:in `map'
from /.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.1/lib/active_record/associations/preloader.rb:134:in `block in preloaders_for_one'  

在使用 .first 提交查询并使用 执行搜索之前

    d = Student.where(:id => '1').includes(:school)

控制台生成

Student Load (0.6ms)  SELECT "students".* FROM "students"  WHERE "students"."id" = 1  
School Load (0.2ms)  SELECT "schools".* FROM "schools"  WHERE "schools"."id" IN (1)
(Object doesn't support #inspect)  
=> 

并返回一个完全空白的行

我确信错误就在某个地方,我只是不知道如何解决它。我也是 StackOverflow 的新手,所以如果我错过了什么,请随时询问。如有任何帮助,我们将不胜感激。

最佳答案

students 表中,school_id 列是否定义为string? Rails 直到最近才喜欢这样。两个选项:

  1. 升级到最新版本的 Rails(截至目前4.1.4)。
  2. 将列类型更改为整数(或 UUID)

关于ruby-on-rails - 与 .include 一起使用时,对象不支持 #inspect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24981092/

相关文章:

javascript - Rails 部分与 Javascript 监听器在主页上工作,但在其他地方不起作用

ruby :method_missing 反引号拼写错误?

ruby - 尝试访问包含模块中定义的方法时出现 NoMethodError

ruby-on-rails - Rails 表单不断返回 nomethoderror

ruby-on-rails - 如何将这两个 Ruby 字符串测试结合到一个正则表达式中?

ruby-on-rails - 返回 rails 中的对象数组

ruby-on-rails - rails : URL helper to combine URL params?

ruby-on-rails - Ruby 1.9 还不支持 Unicode 规范化

ruby - NoMethodError,在sinatra中调用属性

ruby-on-rails - 这行代码似乎适用于 Rails 2.x.x 但不适用于 3.x.x?有人可以帮忙解决 "translate"吗?