1

Rails 3.1とMongoidで1対多の関係を扱うとき、私はnilの未定義メソッド` name'に頭を浮かせます:NilClass私が肯定的であってもそれは存在する。どちらかというと愚かな間違いか、モンゴイドに何か問題があります。さんが詳しく説明してみましょう:Mongoid:nilの未定義メソッド `name ':存在する場合でも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の鉛を呼び出すと、それはあなたがそうであると思っているので、会社ではないnilclassです。

これはすべて、あなたが達成しようとしているものについて少し奇妙で多くのコードに思えます。

私は基本に戻るでしょう。

0

あなたが実際に提示したエラーメッセージは、問題のリードがどこかでNull lead.visitを持っていることを示唆しています。あなたは定義された "リード"を持っていますが、その "訪問"は定義されていません。

のように使用してもよろしいですか?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

これは私が信じる正解です。 –

関連する問題