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
爲零。
那麼我做錯了什麼?