[英]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!
该代码正在生产中! 这让我发疯,我今晚倒退了!
看来您的user
为nil
。 也许您从数据库中删除了该用户,并且在您的关系中没有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.