Rails 3 Render Частично нулевой объект - PullRequest
1 голос
/ 05 августа 2011

Я чувствую, что делаю что-то глупое здесь.Я делаю простое приложение со списком TODO (я понимаю, что их уже миллион).У меня есть определение проекта и различные статусы, которым можно назначить задачу в этом проекте.

Независимо от того, что я получаю следующее сообщение об ошибке при попадании на страницу:

неопределенный метод `title 'для nil: NilClass

Этот вопрос о нулевых объектах чрезвычайно похож, однако предлагаемые решения, похоже, не решают проблему, с которой я сталкиваюсь.У меня только один статус, связанный с проектом, и это не ноль.Мне интересно, имеет ли эта проблема какое-либо отношение к статусам, являющимся ассоциацией ...

В моем проекте у меня есть:

    <% @project.statuses.each do |s| %> 
      <%= s.inspect %> 
      <%= render 'statuses/show', :status => s %>
   <% end %>

#if I take out the render line - the status shows up 

Статус сейчас в основном просто общийпредставление scaffolded - если бы я передавал данные непосредственно из контроллера, он получал бы объект @status.... Я пробовал это с render :partial..., :locals => { :status = s} и т. Д. И т. Д. Будем благодарны за любые предложения.

Обновление - добавлено _show Partial:

<p id="notice"><%= notice %></p>

<p>
  <b>Title:</b>
  <%= @status.title %>
</p>

<p>
  <b>Description:</b>
  <%= @status.description %>
</p>

<p>
  <b>Active:</b>
  <%= @status.active %>
</p>

<%= link_to 'Edit', edit_status_path(@status) %> |
<%= link_to 'Back', statuses_path %>

Обновление - добавлено больше сообщения об ошибке

NoMethodError in Projects#show

Showing /home/.../app/views/statuses/_show.html.erb where line #5 raised:

undefined method `title' for nil:NilClass

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Я полагаю, что проблема в том, что вы имеете в виду @status в частичном ERB, где, как вы должны ссылаться на status, без ведущего @.

@status означает поиск определенной переменной экземпляра . При передаче :status => s означает, что представление будет иметь доступ к s через локальную переменную с именем status.

Также, если просто :status => s не работает, попробуйте :locals => {:status => s}. В любом случае, доступ status в представлении, а не @status.

1 голос
/ 05 августа 2011

Самая большая проблема в том, что :status - это опция для рендера. Он отображает http-код как 200 или: хорошо.

Что должно работать:

<%= render :partial => 'statuses/show', :locals => { :status => s } %>

и не используйте @ для переменной.

<%= status.title %>
...