[RubyonRails]Nil object bij catagoriën binden aan model/ctl

Pagina: 1
Acties:

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 04-01 15:49

JHS

Splitting the thaum.

Topicstarter
Hallo allemaal,

Niet de meest duidelijke topictitel, maar dat komt omdat ik niet goed snap waar het probleem in zit :) . Ik heb een RoR "applicatie" waarbij onder andere een nieuwsitem een catagorie moet kunnen hebben.

Als ik nu echter de in de controller volgens mij gegenereerde locale variabele @catagories in een edit.rhtml, of list.rhtml for that matter, krijg ik een nil-object error. Omdat code wat duidelijker is:

controllers/news_controller.rb
Ruby:
1
2
3
4
5
6
7
8
9
class NewsController < ApplicationController
    :authorise
    scaffold :news
  
    def edit
        @news = News.find(params[:id])
        @catagories = Catagory.find_all
    end
end

Hier zou dus het Catagory model moeten worden aangeroepen. De code daarvan:

models/catagory.rb
Ruby:
1
2
3
class Catagory < ActiveRecord::Base
    has_many :news
end


En in het News model is ook de relatie aangegeven:

models/news.rb
Ruby:
1
2
3
class News < ActiveRecord::Base
    belongs_to :catagory
end


in de edit.rhtml roep ik dit zo aan:

views/news/edit.rhtml
HTML:
1
2
3
4
5
6
   <% @categories.each do |category| %>
       <option value="<%= category.id %>" 
         <%= ' selected' if category.id == @news.category_id %>>
         <%= category.name %>
       </option>
   <% end %>


Ik roep de hele zooi aan met http://server:3000/news/edit/1 . News met id 1 bestaat ook, en heeft een bestaande catagorie. Mijn database layout:

Table: news
VeldType
idint(11)
catagory_id
titlevarchar(50)
contentmediumtext


Table: news
VeldType
idint(11)
namevarchar(50)


Uit het feit dat als ik de tabel rename naar catagory er een error komt welke aangeeft dat de tabel niet bestaat, blijkt dat het model zijn werk wel doet, en het model en de table wel de juiste naam hebben.

Om erachter te komen waar het probleem in schuilt heb ik verschillende how-to's gelezen over hoe je catagoriën aan iets moet verbinden, zoals die op OnLamp. Overigens is de "applicatie" zelf natuurlijk eigenlijk uitgebreider, maar ik heb het gesimplificeerd tot bovenstaande :) .

Ik hoop dat iemand me kan vertellen waar mijn probleem in schuilt, of waar ik zou moeten zoeken :) .

edit:
Oh, de error beschrijven is ook erg handig :) . Ik krijg dus een error dat @catagories in edit.rhtml leeg is. De exacte error:

code:
1
2
3
4
5
6
7
8
9
10
11
 Showing /news/edit.rhtml where line #17 raised:

WARNING:  You have a nil object when you probably didn't expect it!  Odds are you
want an instance of Array instead.

Look in the callstack to see where you're working with an object that could be nil.
Investigate your methods and make sure the object is what you expect!

Extracted source (around line #17):

17:    <% @categories.each do |category| %>

[ Voor 13% gewijzigd door JHS op 27-09-2005 17:32 ]

DM!


  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 01-03 18:17
JHS schreef op dinsdag 27 september 2005 @ 17:24:
edit:
Oh, de error beschrijven is ook erg handig :) . Ik krijg dus een error dat @catagories in edit.rhtml leeg is.
Nee, je krijgt de melding dat @categories nil is. En dat klopt ook want jij gebruikt overal de naam catagories, behalve in edit.rhtml. Overigens is het goede woord categories, met een 'e' dus ;)

Als je het snel werkend wilt hebben verander je edit.rhtml dus, als je het netjes wilt houden en van goede spelling houdt dan verander je alle andere catagories in categories :)

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 04-01 15:49

JHS

Splitting the thaum.

Topicstarter
:X :X O-) . En daar zit je dan al dagen naar te turen :{ .

Hartelijk dank iniedergeval :* !

DM!