繁体   English   中英

生产中使用的代码在开发中不再起作用?

[英]Code that is working in production no longer works in development?

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

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!

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

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

如果注释可以在没有用户的情况下存在,那么最好的选择是使用委派来避免此类问题。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM