尝试使用rails 3为博客构建CMS 在我的routes.rb ...
namespace :admin do
resources :posts
root :to => "home#index"
end
在Admin :: PostsController中......
def update
@post = Post.find(params[:id])
respond_to do |format|
if @post.update_attributes(params[:post])
format.html { redirect_to(@post,
:notice => 'Post was successfully updated.')}
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @post.errors,
:status => :unprocessable_entity }
end
end
end
我不得不更改admin / _form.html.erb的第一行,因为之前的“未定义方法”错误让我发疯。试图将浏览器指向不存在的“post_path”。
<%= form_for(@post, :url => admin_posts_path(@post)) do |f| %>
帖子的所有其他方法都按预期工作。表单提交(更新) - rails服务器......
Started POST "/admin/posts.1"
ActionController::RoutingError (No route matches "/admin/posts.1"):
首先,好奇为什么它使用POST而不是PUT进行更新。
其次,我无法弄清楚为什么URL被解释为“/admin/posts.1”以及如何修复它。
还有其他人遇到过这个问题吗? (是的,我正在密切关注rubyonrails.org指南以帮助我)。任何帮助将不胜感激。
编辑:
每theIV将admin_posts_path(@post)
更改为admin_post_path(@post)
。
rails服务器...
NoMethodError (undefined method 'post_url' for #<Admin::PostsController:0x00000102b26ff8>):
app/controllers/admin/posts_controller.rb:55:in 'block (2 levels) in update'
app/controllers/admin/posts_controller.rb:53:in 'update'
答案 0 :(得分:4)
我相信你应该点击admin_post_path(@post)
,而不是admin_posts_path(@post)
。
查看列出在guides.rubyonrails.org上为您的路线创建的所有帮助程序的表。
编辑:另外,您是否尝试过网址的数组样式?这很方便。<%= form_for([:admin, @post]) do |f| %>
编辑2:我对“未定义的方法post_url”的猜测来自您的更新操作:
format.html { redirect_to(@post,
:notice => 'Post was successfully updated.')}
它也需要被命名空间:
format.html { redirect_to([:admin, @post],
:notice => 'Post was successfully updated.')}