1

Rails 3.1과 Mongoid에서 일대 다 관계로 작업 할 때, Nil 클래스의 정의되지 않은 메서드 인`name '에 머리를 부딪 치고 있습니다. 비록 내가 긍정적이라 할지라도 그것은 존재합니다. 어리석은 실수이거나 몽고 이드에게 잘못된 것이 있습니다. 나는이 오류가 계속Mongoid : 정의되지 않은 메서드 'name'for nil : NilClass (존재하는 경우에도)

:

NoMethodError in Leads#index 

Showing /app/views/leads/index.html.haml where line #19 raised: 

undefined method `heat' for nil:NilClass 
Extracted source (around line #19): 

16:  - @leads.each do |lead| 
17: 
18:   %tr 
19: %td #{lead.visit.heat}° 
20: %td 
21: = link_to lead.name, :controller => "leads", :action => "show", :id => lead.id 

을 그리고 콘솔이 재현하려고 할 때, 위대한 작동하는 것 같다의 정교 보자. 참으로 경탄스러운 .. 여기

관련 장소의 코드입니다 :

-------------------------*SCHNIP*------------------------------------ 
class Company 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    field :name, type: String 

    has_one :visit 

    def self.get_companies 
    visits = Visit.get_visits 

    companies = self.all 
    visits.each do |visit| 

     unless companies.name.include?(visit.name) 
     new_company = self.new 

     new_company.name = visit.name   
     new_company.visit = visit 
     new_company.save 
     end 
    end 

    #return companies for current instance 
    return Company.where(:visit.exists => true) 
    end 
end 

-------------------------*SCHNIP*------------------------------------ 

class Visit 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    field :heat, type: Integer 
    field :name, type: String 

    belongs_to :company 


    def self.get_visits 
    return self.all 
    end 

end 

-------------------------*SCHNIP*------------------------------------ 

class LeadsController < ApplicationController 
    def index 
    @selected = 'visitors' 
    @leads = Company.get_companies 
    end 
end 

-------------------------*SCHNIP*------------------------------------ 

app/views/leads/index.html.haml 

- @leads.each do |lead| 

    %tr 
    %td #{lead.visit.heat}° 
    %td 
     = link_to lead.name, :controller => "leads", :action => "show", :id => lead.id 

-------------------------*SCHNIP*------------------------------------ 

답변

0

하지 귀하의 질문에 대한 대답은하지만 왜해야합니까 :

방문 모델에서
def self.get_visits 
    return self.all 
    end 

이 아니다 Visit.all과 똑같은가?

lead.name을 호출하면 lead가 nilclass 인 것은 회사가 아닌 것으로 예상됩니다.

당신이 성취하려고하는 것에 대해 모두 이상하고 멀리있는 코드로 보입니다.

나는 기본으로 돌아갈 것이다.

0

실제로 표시 한 오류 메시지는 문제의 리드가 어딘가에서 Null lead.visit을 가지고 있음을 나타냅니다. 정의 된 "리드"가 있지만 "방문"은 정의되지 않았습니다.

.exists과 같이 사용할 수 있습니까? visit.exists? 실제로 방문 필드가없는 리드를 받고있는 것 같습니다.

당신이 작동하는지 확인하시기 바랍니다

- @leads.each do |lead| 
    - if lead.visit 
     %tr 
      %td #{lead.visit.heat}° 
      %td 
       = link_to lead.name, :controller => "leads", :action => "show", :id => lead.id 

뭔가를 시도 할 수, 확인하십시오.

1

방금이 문제가 발생하여 계정 - 거래 관계가있었습니다.

나는 거래를 계정에 내장 했으므로 트랜잭션을 독자적으로 만들지 못했습니다. 동일한 오류 메시지가 나타납니다. 내가 이런 짓을하는 경우

는하지만 :

a = Account.create 
a.transactions.create 

는 그런 모든 것이 잘 갔다. 희망은 뭔가 설명하는 데 도움이됩니다.

+0

이것은 내가 생각하는 정답입니다. –

관련 문제