我在rails中创建博客应用程序。我有一个创建和更新博客的常用表单。
这是edit和new.html.erb的视图
<%= render :partial => "form"%>
这是_form.html.erb博客的视图:
<%= form_for @blog do |f| %>
<%= f.text_field :title, :placeholder => "Title" %><br>
<%= f.cktext_area :article, :placeholder => "Content", :ckeditor => {:toolbar => "MyToolbar"} %>
<%= f.submit %>
<% end %>
我的博客创建成功,但我收到更新操作错误。这是我在博客控制器中的编辑和更新操作:
def edit
@blog = Blog.find_by_slug(params[:id])
end
def update
@blog = Blog.find(params[:id]) || not_found
@blog.update_attributes(params[:blog])
redirect_to "/blogs/#{@blog.slug}"
end
当我从编辑视图打开表单并单击更新按钮时,它会抛出错误:
No route matches [PUT] "/blog/2"
我的routes.rb是:
resources :blogs
get 'blog', to: 'blogs#index'
get '/blog/:id', to: 'blogs#show', as: 'blog'
我没有得到它出错的地方。我尝试在form_for中添加“url:blogs_path”,它会删除错误但不保存编辑更改。
任何人都可以帮我解决我在这里出错的地方吗?
谢谢。
答案 0 :(得分:0)
好。我不明白你为什么要违反惯例。无论如何,如果form_for resource
更新操作,使用/resources/:id
将自动生成操作URL作为PUT到put 'blog/:id' => 'blogs#update', :as => 'update_blog'
。
所以要覆盖它,你需要做两件事。
将此行添加到路线文件中:
<%= form_for @blog, :url => update_blog_path(@blog) do |f| %>
将此行置于“资源:博客”电话上方非常重要。
2。指定表单应提交的URL:
您需要像这样创建表单标记:
{{1}}
试试这个并告诉我们。