NilClass的未定义方法电子邮件?

时间:2014-12-08 19:02:05

标签: ruby-on-rails ruby-on-rails-4

所以我收到以下错误:

未定义的方法`email'代表nil:NilClass

提取的来源(第14行):

<ul>
<li><h5><%= newsletter.name if newsletter.image.present? %></h5></li>
By: <%= @user.email if @user.email.present? %>  <--- line 14

这与此代码有关:

<% @newsletters.each do |newsletter| %>
  <% @user = newsletter.user %>

<ul>
  <li><h5><%= newsletter.name if newsletter.image.present? %></h5></li>
  By: <%= @user.email if @user.email.present? %>
  <li><%= image_tag newsletter.image.url(:medium) if newsletter.image.present? %></li>
</ul>
<% end %>

最后,我想向新闻简报的电子邮件地址的所有者展示。为什么这不起作用?

谢谢!

3 个答案:

答案 0 :(得分:1)

当您的简报没有用户时,就会发生这种情况。您应该在显示用户电子邮件之前检查用户是否存在。

<ul>
  <li><h5><%= newsletter.name if newsletter.image.present? %></h5></li>
  <%if @user && @user.email.present? %>
    By: <%= @user.email %>
  <% end %>
  <li><%= image_tag newsletter.image.url(:medium) if newsletter.image.present? %></li>
</ul>
<% end %>

答案 1 :(得分:1)

当没有用户在场时会发生这种情况。您可以使用@ Vimsha的解决方案。或试试这个:

<ul>
  <li><h5><%= newsletter.name if newsletter.image.present? %></h5></li>
    By: <%= @user.try(:email) %>
  <li><%= image_tag newsletter.image.url(:medium) if newsletter.image.present? %></li>
</ul>
<% end %>

答案 2 :(得分:1)

您已经得到了答案:用户不存在时事通讯。要仅提取具有用户的简报,我建议您与用户一起加入表格。

@newsletters = Newsletter.where(conditions).all # what you're doing now - just an example
@newsletters = Newsletter.joins(:user).where(conditions).all # will exclude newsletters that don't have a user