Rails-data关联一对多(未定义的方法`key?'为nil:NilClass)

时间:2012-07-09 06:43:46

标签: ruby-on-rails associations foreign-key-relationship

我需要有关以下错误的帮助:

  

未定义的方法`键?'为零:NilClass

在我向我的表添加一些数据关联之后发生了这样的事情:

    class Crew < ActiveRecord::Base
        has_many :Peme, :foreign_key => pemeid, :dependent => destroy
        has_many :Training, :foreign_key => trgid, :dependent => destroy
        has_many :Visa, :foreign_key => visaid, :dependent => destroy
        has_many :Contract, :foreign_key => contid, :dependent => destroy
        has_many :FlagEndorsement, :foreign_key => flgendoid, :dependent => destroy
        has_many :Seminar, :foreign_key => semid, :dependent => destroy
    end

   Class Contract < ActiveRecord::Base
       attr_accessible :contcost, :contdate, :contid, :contremarks, :conttype, :crewid
       belongs_to :Crew, :foreign_key => "crewid"
   end
   class FlagEndorsement < ActiveRecord::Base
       attr_accessible :crewid, :flgendocost, :flgendodate, :flgendoid, :flgendoremarks, :flgendotype
        belongs_to :Crew, :foreign_key => "crewid"
  end
  class Peme < ActiveRecord::Base
       attr_accessible :crewid, :pemecost, :pemedate, :pemeid, :pemeremarks, :pemetype
       belongs_to :Crew, :foreign_key => "crewid"
  end
 Class Seminar < ActiveRecord::Base
       attr_accessible :crewid, :semcost, :semdate, :semid, :semremarks
       belongs_to :Crew, :foreign_key => "crewid"
 end
 Class Training < ActiveRecord::Base
      attr_accessible :crewid, :trgcost, :trgdate, :trgid, :trgremarks, :trgtype
      belongs_to :Crew, :foreign_key => "crewid"
 end
 class Visa < ActiveRecord::Base
   attr_accessible :crewid, :visacost, :visadate, :visaid, :visaremarks, :visatype
   belongs_to :Crew, :foreign_key => "crewid"
end

我想成为一名依赖于船员的人,培训,签证,flgendorsements,研讨会 但我该怎么办?

1 个答案:

答案 0 :(得分:1)

<强> 1 即可。得到你的大/小写分类。 has_many必须后跟下划线形式的复数关联名称,如下所示:

has_many :flag_endorsements

<强> 2 即可。让你的符号正确:

    :foreign_key => pemeid, :dependent => destroy

这不是将:foreign_key设置为:pemeid:dependent设置为:destroy,而是查找局部变量pemeiddependent的值。如果不存在局部变量,它将尝试调用不存在的方法pemeiddependent。第二个你为了完全不同的目的在某个地方定义这些方法,你正在调试地狱。

第3 即可。获得正确的命名约定。 crewid是属性/列的可怕名称。它必须是crew_id。字面上你指定的每个属性/列都是一样的。请阅读一些有关rails的基本教程,其中每个人都明确表示遵循约定有多好,以及如何围绕约定构建rails,如果你不遵循它们,你的rails东西将无法正常工作。

清理完代码后 - 提供完整的异常跟踪(如果某些内容仍然存在),然后有人可能会帮助您。