Ruby on rails Rails中nil:NilClass的未定义方法

Ruby on rails Rails中nil:NilClass的未定义方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在呈现一个帖子列表,每个帖子都与发布它们的用户关联。有些用户有头像,有些没有 以下是查看代码: <% if @posts.exists? %> <ul class="forum-activity-list"> <% @posts.each do |post| %> <li class="forum-activity-item"> <div class="item-photo"> &l

我正在呈现一个帖子列表,每个帖子都与发布它们的用户关联。有些用户有头像,有些没有

以下是查看代码:

 <% if @posts.exists? %>
  <ul class="forum-activity-list">
    <% @posts.each do |post| %>
    <li class="forum-activity-item">
      <div class="item-photo">
        <%= render 'users/avatar', user: post.user %>
      </div>
      <div class="item-info">
        <%= link_to post.title, post_path(post), :class => "title" %>
        <div class="metadata">Posted <%= time_ago_in_words(post.created_at) %> ago by <%= post.user.email %> in Advertising</div>
      </div>
      <div class="item-replies">
        <span><%= post.comments.count %></span> replies
      </div>
    </li>
    <% end %>
  </ul>
  <% end %>
此位通过一个部分渲染化身:

<%= render users/avatar, user: post.user %>
以下是部分内容:

<% if user.avatar.presence %>
 <%= image_tag user.avatar.url %>
<% else %>
<%= link_to user_path(user), :class => "default-profile-image" do %>
  <i class="fa fa-user"></i>
 <% end %>
<% end %>
在当地,这一切正常,正如预期的那样。但在生产中,我在日志中得到了这个错误:ActionView::Template::error未定义nil:NilClass的方法“avatar”

在制作中,并没有帖子,所以我希望并没有任何渲染,所以并没有得到这个问题,但它仍然在发生

知道为什么吗


提前感谢您。

在制作中,您有一篇没有关联用户的帖子。可能用户是在帖子创建后被删除的。

好的,我以前也遇到过类似的问题,这是因为在某个时候,您修改了数据库架构,并且生产中的旧数据给您带来了问题,如果您的生产应用程序未被实际用户使用,并且您没有重要数据,请在部署的服务器终端中执行以下操作:

这将删除您的数据库,再次创建它,并使用以下所有内容重新加载当前架构:

rake db:drop db:create db:migrate
如果您有带有测试数据的seeds.rb,也可以运行

rake db:seed

所有数据都将丢失,如果无法删除当前数据,则需要手动查找每篇文章并删除没有关联用户的文章。

问题在这一行

返回接收器(如果存在),否则返回nil。object.presence相当于

object.present? ? object : nil
你应该改用


如果在生产中添加一个post,它是否可以防止错误?你能在本地清除所有帖子,看看你是否得到了错误吗?请发布整个错误日志。查看错误前后发生的情况是故障排除的一个重要部分。我还应该指出,与到处散布防御代码相比,确保您的数据是干净的,并且信任您编写的代码中的数据几乎总是更好的,这会分散您的业务逻辑,使重构更加困难。Thansk!然而,我将创建另一个问题,询问如何做到这一点,例如在heroku中部署应用程序时
<% if user.avatar.present? %>
 <%= image_tag user.avatar.url %>
<% else %>
<%= link_to user_path(user), :class => "default-profile-image" do %>
  <i class="fa fa-user"></i>
 <% end %>
<% end %>