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*------------------------------------
これは私が信じる正解です。 –