0

我正在 Rails 中创建博客应用程序。我有一个用于创建和更新博客的通用表格。

这是编辑和 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”,它消除了错误但不保存编辑更改。

有人可以帮我这里哪里出错了吗?

谢谢你。

4

1 回答 1

0

好的。我不明白你为什么要违反约定。无论如何,如果它是更新操作,使用form_for resource将自动生成操作 URL 作为 PUT 。/resources/:id

因此,要覆盖它,您需要做两件事。

  1. 更新您的路线以支持这一点:

将此行添加到您的路由文件中:

put 'blog/:id' => 'blogs#update', :as => 'update_blog'

将这一行放在 'resources :blogs` 调用之上是很重要的。

2. 指定表单应提交到的 URL:

您将需要像这样创建表单标签:

<%= form_for @blog, :url => update_blog_path(@blog) do |f| %>

试试这个,让我们知道。

于 2013-08-06T05:41:40.857 回答