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
Hier zou dus het Catagory model moeten worden aangeroepen. De code daarvan:
models/catagory.rb
En in het News model is ook de relatie aangegeven:
models/news.rb
in de edit.rhtml roep ik dit zo aan:
views/news/edit.rhtml
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
Table: news
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
.
. Ik krijg dus een error dat @catagories in edit.rhtml leeg is. De exacte error:
Niet de meest duidelijke topictitel, maar dat komt omdat ik niet goed snap waar het probleem in zit
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
| Veld | Type |
| id | int(11) |
| catagory_id | |
| title | varchar(50) |
| content | mediumtext |
Table: news
| Veld | Type |
| id | int(11) |
| name | varchar(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 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 ]