Entwicklung melden: ActionView::Template::Error (undefined method `name' for nil:NilClass):
Ich bin ein Neuling und diese ist für den Schienen-Lernprogramm von Richard Schneeman. Das ist alles, was in meinem index.html-Code.erb-Datei in meinem view/products Ordner.
<% first_product = Product.first %>
<% lots_of_products = Product.includes(:user).all %>
<ul>
<% lots_of_products.each do |product| %>
<li>
Product Name: "<%= product.name %>"" costs $<%= product.price %>
Sold by <%= product.user.name %>
</li>
<% end %>
</ul>
Das Problem mit <%= product.user.name %>
, das gibt den Fehler:
NoMethodError in Produkte#undefined index Methode `name' für
nil:NilClass.
Mein controller-Dateien sind Vanille und meiner Wege.rb hat:
ControllerExercise::Application.routes.draw do
get '/products' => 'products#index'
resources :users
end
Dies ist in den Modellen:
class Product < ActiveRecord::Base
belongs_to :user
attr_accessible :name, :price
end
class User < ActiveRecord::Base
has_many :products
attr_accessible :job_title, :name
end
Jegliche Hilfe wird sehr geschätzt.
InformationsquelleAutor ltrainpr | 2013-04-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrer Datenbank ich vermute, einige Ihrer Produkt-Daten nicht enthalten sold_by_id oder user_id.
So immer Produkt.user null, da keine Benutzer verbunden ist mit dem Produkt.
Statt
verwenden
überspringen diese Ausnahme.
So Ihren index.html-Code.erb wird
InformationsquelleAutor user2284458
Können Sie auch versuchen,
Wenn Sie Ihre 15 Ruf-Punkte. dann können Sie das tun...
InformationsquelleAutor Aditya Kapoor
Kam ich auch an diese und verwendet eine einfache if else Anweisung, da wollte ich noch etwas zeigen, auch wenn der Benutzername nicht vorhanden ist
InformationsquelleAutor Jason Ball
Eine große Abhilfe für dieses ist ruby ist ein sicherer Zugang Bediener &.
sehen http://mitrev.net/ruby/2015/11/13/the-operator-in-ruby/
Es wurde erfunden von Matz (ruby-Gründer) für diese situation. In deinem Fall würde das so Aussehen,
Es wird nil zurückgegeben, wenn das Attribut "name" ist nicht definiert. Im Auge behalten, seine nur verfügbar in ruby 2.3.0 und höher.
InformationsquelleAutor sakurashinken