2015-06-30 25 views
0

我有生产中正常工作的代码。我搞砸了在主分支几行,删除了我的本地回购,再克隆它,现在的应用程序是引发此错误:在生产中工作的代码不再适用于开发?

undefined method `user_name' for nil:NilClass 

现在因为我的代码看起来100%我..认为这是愚蠢的:

<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> 

,这里是我的节目控制器操作:

def show 
@post = Post.includes(:user).find(params[:id]) 
@comments = @post.comments.order('created_at desc') 
end 

我的联想是正确的,我的用户有一个USER_NAME!

此代码正在生产中!这让我疯狂,今晚我倒退了!

+0

所以每个评论现在都有一个user_id为nil?那是怎么发生的? –

回答

0

这似乎是特别没有一个用户与它相关联。要解决此错误,请使用try

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

看来你的usernil。也许你从数据库中删除了用户,并且在你的关系中没有dependent: :destroy

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

在您的评论的模型,你可以添加

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

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

+0

我所有的评论user_id的我们被设置为零,这是怎么发生的..在我的评论控制器中是不是? –

相关问题