Ruby on rails 对象没有';t支架#与一起使用时检查。包括

Ruby on rails 对象没有';t支架#与一起使用时检查。包括,ruby-on-rails,nomethoderror,Ruby On Rails,Nomethoderror,所以我遇到了一个严重的错误,我甚至不知道如何调试。我对Rails还很陌生,所以这让我大吃一惊。当我在学生查找时使用.includes(:school)时,它会返回一个nilClass错误,但当我使用任何其他模型和.includes(:school)进行查找时,school的性能很好 class Student < ActiveRecord::Base has_many :relationships, foreign_key: "liker_id", dependent: :dest

所以我遇到了一个严重的错误,我甚至不知道如何调试。我对Rails还很陌生,所以这让我大吃一惊。当我在学生查找时使用
.includes(:school)
时,它会返回一个nilClass错误,但当我使用任何其他模型和
.includes(:school)
进行查找时,school的性能很好

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
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'  
在使用提交查询之前。首先使用执行搜索

    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的新手,所以如果我错过了什么,请随时提问。感谢您的帮助。

学生
表中,
学校id
列是否定义为
字符串
?Rails直到最近才喜欢这样。两种选择:

  • 升级至Rails的最新版本(
    4.1.4
  • 将列类型更改为整数(或UUID)

  • 可能您没有id为1的学生。我最初认为是这样,但昨晚清除了整个数据库,并在今天早上通过console创建了所有记录。数据库中有15个学生。它被定义为一个varchar,将其更改为一个整数,从而修复了错误。谢谢你的帮助,伙计。
    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)  
    =>