Rails 3 рендерит частичную ошибку - PullRequest
0 голосов
/ 18 февраля 2012

У меня есть приложение rails, которое использует партиалы, и в процессе разработки все отлично работает, но на производстве я получаю сообщение об ошибке

К сожалению, что-то пошло не так.

Мы получили уведомление об этой проблеме, и вскоре рассмотрим ее.

Я проверил свой файл production.log, и это ошибка, которую я получаю

ActionView :: Template :: Error (неопределенный метод `model_name 'для NilClass: Class):

Вот строки, которые вызывают проблемы

<%= div_for blog do %>

и здесьЧто вызывает этот файл

<%= render :partial => 'blogs/blog', :locals => {:blog => @profile.blogs.last}%>

Вот вся ошибка

ActionView::Template::Error (undefined method `model_name' for NilClass:Class):
1: <%= div_for blog do %>
2: <p>
3:   <b>Title:</b>
4:   <%= blog.title %>
app/views/blogs/_blog.html.erb:1:in 
app/views/profiles/show.html.erb:22:in

Любые идеи о том, как я могу решить эту ошибку?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Вы фактически звоните nil.last, который выдаст такую ​​ошибку.

Используйте условное отображение для частичного только если @profile содержит блоги:

<%= render(:partial => 'blogs/blog', :locals => {:blog => @profile.blogs.last}) if @profile.blogs.present? %>

Или, что бы я сделал, используйте частичное. На ваш взгляд:

<%= blogs_or_message %>

В частичном:

def blogs_or_message
  if @profile.blogs.present?
    render(:partial => 'blogs/blog', :locals => {:blog => @profile.blogs.last})
  else
    "No blogs found" # <= simple error message instead of nothing
  end
end
1 голос
/ 18 февраля 2012

Я предполагаю, что Rails не слишком умен, и пропускает этот DIV, если blog равно nil. Вот несколько возможных обходных путей:

Если вы действительно хотите создать только один блог:

<% div_for(@profile.blogs.last) do %>
    ...whatever...
<% end if @profile.blogs.last %>

Или, если вы хотите DIV для каждого блога, вам не нужно условное, так как @profile.blogs даст вам пустой массив, и Rails знает, что с этим делать:

<% div_for(@profile.blogs) do %>
    ...whatever...
<% end %>

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...