当我创建新用户并查看用户的个人资料时我得到以下错误我认为因为用户尚未创建状态:
undefined method `length' for nil:NilClass
来自Status_form:
<%= form_for [@status], :url => user_status_path(current_user) do |f| %>
<div class="field">
<%= f.text_area :content, id:"status_box", maxlength:350, placeholder: "Say something." %>
</div>
<%= f.submit "Update", id:"status_btn", class: "btn btn-small btn-primary" %>
<span id="counter">Characters left: <%= 350 - @status.content.length %></span> #this is the source of the error
<script type="text/javascript">
$('#status_box').keyup(function () {
var left = 350 - $(this).val().length;
if (left < 0) {
left = 0;
}
$('#counter').text('Characters left: ' + left);
});
</script>
<% end %>
用户控制器:
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
redirect_to root_path
else
render 'new'
end
end
def show
@user = User.find(params[:id])
@status = @user.status || @user.build_status
end
答案 0 :(得分:3)
这是因为nil
列的默认值为content
。因此,您无法在length
上致电nil
。如果您想在length
上使用content
,则需要将default
值设置为empty string("")
,或者先使用to_s
然后length
< / p>
<%= 350 - @status.content.to_s.length %>
或
<%= 350 - (@status.content.try(:length) || 0) %>
答案 1 :(得分:0)
你的控制器中有这个:
@status = @user.status || @user.build_status
看起来错误来自
@status.content.length
我敢打赌@status的'内容'是零。