NoMethodError in partial driving me mad


i simplified have a news model, a news category model and a news
my _news.rhtml partial renders a single news entry.

in my controller there are the actions show and show_category.
if the "show" action is called, a single news item is rendered through
my partial with no errors.

if the "show_category" action is called, i get a NoMethodError while
displaying my news through the partial.


i tried this but it did not work.

here is the new show_category action:

def show_category
    @newses = NewsCategory.find(params[:id]).news
    render_partial 'news', :collection => @newses

the new error is:

NoMethodError in News#show_category

Showing app/views/news/_news.rhtml where line #2 raised:

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.title

Extracted source (around line #2):

1: <div>
2: <h1><%=h news.title %> - Kategory: <%= news.news_category.title
3: <p>
4: <%= bbcodeize news.content %>
5: </p>

still no one hast a answer for this problem?
im stuck till now.. :frowning:

to sum up, first error was a noMethodError for

second one a nil object...

help! :frowning:

have you tried testing the News class and the NewsCategory class
associations? I see a has_many association in the first full trace..
Can you test if it the news_category is working correctly?


You were almost there originally... you just need to pass the first
call to render a locals hash so that the news variable in the partial
is populated correctly. The collection render does it automatically.
BTW, your problem does not appear to have anything to do with Rails

def show
   @news = News.find(params[:id])
   render :partial => 'news', :locals => { :news => @news }

def show_category
   @news = NewsCategory.find(params[:id]).news
   render :partial => 'news', :collection => @news


oh my god, this is it! it works.

did not realy understand what the News:Class came from but… its gone now and iam happy :slight_smile:
i’ll try to understand this later after finishing (finally) my tiny app.