Controller / Model confusion


#1

I have created a product, with two controllers and two models, one for
categories and one for articles. In my models directory, I have
article.rb and articles.rb and seem to have code that relies on both of
these!

I am unable to get any validation working because of this (whichever
model I put the code in, it doesn’t load it)

Should I just rip it all apart and start again?


#2

the name of the controller file should be article.rb, and the class
ArticleController

Write some tests, see what is depending on the other class, and
refactor.

matt


#3

Matt,

not sure what you’ve done to get what you’ve got, but the destroy script
will certainly help you clean up properly (i.e: it removes the tests and
helpers and stuff)

e.g:

ruby script/destroy controller article

John.
p.s: we off for a curry tomorrow night? Omar’s in Bradford yeah? :wink:
p.p.s: anyone in Bradford, UK is welcome to join us too :slight_smile:


#4

Now getting:-

You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occured while evaluating nil.inject

The offending snippet of code is:-

<%= options_from_collection_for_select categories, "id", "category", article.category_id %>

My form itself is in a partial, which I am rendering with:-

<%= render :partial => ‘form’, :locals => {:article => @article,
:categories => @categories} %>

matt


#5

Can’t really see what’s going on there, but what you SHOULD have is:

you should have two controllers called categories.rb and articles.rb in
the controllers folder.

And your models folder should contain the singular of these, so
category.rb and article.rb.

Other than that, your partial seems correct. You sure @categories and
@article are set correctly in your controller? They appear to be nil.
Have a look at the Sql in your logfiles and run it on your database to
make sure it returns the data you’re expecting.

Is the name of your field that holds your category name called category?

Hope any of this helps you find the problem.

Joerg