在生产中工作的代码不再适用于开发?

时间:2015-06-30 03:59:47

标签: ruby-on-rails

我的代码在生产中运行良好。我在主分支上搞了几行,删除了我的本地仓库,重新克隆了它,现在应用程序抛出了这个错误:

df['metadata'] == 'MM'

现在这很愚蠢,因为我的代码对我来说是100%的...视图:

undefined method `user_name' for nil:NilClass

这是我对show的控制器操作:

<div id="comment-container">
    <% @comments.each do |comment| %>


  <div class="well well-sm comment-well">
  <button class="btn btn-sm btn-default" id="comment-name"><%= comment.user.user_name %></button>

  <div id="com-text">
    <p><%= comment.body %></p>
  </div>
  </div>


 <% end %>
</div>

我的关联是正确的,我的用户有一个user_name!

此代码正在制作中!这让我发疯了我今晚倒退了!

2 个答案:

答案 0 :(得分:0)

您的user似乎是nil。也许您从数据库中删除了用户,并且在您的关系中没有dependent: :destroy

如果评论可以在没有用户的情况下存在,那么最好的办法就是使用委托来避免这类问题。

在评论模型中,您可以添加

delegate :user_name, to: :user, allow_nil: true

之后,你可以写comment.user_name,它会在出现时返回正确的结果,否则会nil。 请注意,它仍然需要查询users表,因此您仍然需要includes(:user)来避免N+1查询问题。

答案 1 :(得分:0)

似乎特定的 帖子 没有与之关联的 用户 。要解决此错误,请使用try

<%= comment.user.try(:user_name) %>