0
我有以下两种方法在Rails控制器:渲染:编辑不工作,我期望
def edit
@blog = Blog.find_by!(id: params[:id])
end
def update
blog = Blog.find_by!(id: params[:id])
user = User.find_by!(id: params[:user_id])
blog.update_attributes(blog_update_params)
if blog.save
flash[:success] = 'Updated Blog'
redirect_to user_blog_path(user.id, blog.id)
else
render :edit
end
end
让我们假设此更新失败,好了,所以你应该render :edit
这意味着,在我的脑海中,我们应该将博客的ID传递给编辑操作并重新呈现表单。这反过来会显示任何错误:
<div class="container-sm">
<%= form_for @blog, :url => user_blog_path(current_user.id, @blog.id), :html => {:class => 'form-horizontal'} do |f| %>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<h1>Edit <%= @blog.title %></h1>
<p class="text-muted">Want to change the name? Never a simpler place!</p>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-6">
<%= render :partial => 'form_errors', :object => @blog %>
</div>
</div>
<%= render :partial => 'blog_form', :locals => {:f => f} %>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<%= f.submit "Update", :class => 'btn btn-primary' %>
</div>
</div>
<% end %>
</div>
我上面的编辑表单,很基本。很简单。大家都开心。如果我们仍然生活在假设更新失败,应该重新呈现这种形式,但问题是:undefined method
ID”为无:NilClass`这发生在:
<%= form_for @blog, :url => user_blog_path(current_user.id, @blog.id), :html => {:class => 'form-horizontal'} do |f| %>
我在做什么错在这里?每个教程,表单帖子或堆栈问题都表示这是如何重新呈现表单以显示任何错误。
当我在render :edit
之上放置,然后复制并粘贴以使其物理呈现编辑操作时,@blog
是空白的。 current_user包含当前用户,在本例中为@blog
为零。
那么我做错了什么?