【发布时间】:2013-08-04 18:21:15
【问题描述】:
我正在 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”,它消除了错误但不保存编辑更改。
谁能帮我解决我哪里出错了?
谢谢。
【问题讨论】:
-
发布你的 routes.rb 文件
-
我建议您阅读Getting Started with Rails Guide。看来有些基本原理(比如路由)你还不明白。
-
在控制台运行
rake routes时检查是否有 'PUT /blog/:id => blog#update' 路由 -
如果您遵循约定,则该 url 实际上应该是
blogs/:id。您是否自己编写了自定义 REST 路由?? -
@aromero 更新了博客路径的问题。