路由错误没有路由匹配[POST]“/ comments / new” - 使用范围

时间:2014-03-26 15:58:49

标签: ruby-on-rails ruby-on-rails-4

当我尝试提交评论时出现错误。

routes.rb文件:

scope module: 'admin' do 
  resources :comments
end

_form

<%= form_for new_comment_path do |f| %>

  <%= f.label :name %><br>
  <%= f.text_field :name %>
  ...

 <%= submit_tag 'Submit', :class => 'btn btn-primary' %>

<% end %>

comments_controller.rb

def new
  @comment = Admin::Comment.new
end

def create
  @comment = Admin::Comment.new(comment_params)

  ...

end

2 个答案:

答案 0 :(得分:2)

使用

<%= form_for(@comment, url: comments_path) do |f| %>

当您需要发布表单时,您需要一个POST路由。这会自动将您的表单发布到create操作(comments_path)。逻辑new表单应发布到您的控制器的create操作。

new_comment_path指的是您尝试在表单上使用的新页面的GET路由。它不是POST路线,因此您会收到错误。

new_comment GET    /comments/new(.:format)   admin/comments#new
            POST   /comments(.:format)    admin/comments#create  ## You need this route

可替换地:

定义您的路线如下:

namespace :admin do 
  resources :comments
end

您可以使用form_for作为

<%= form_for(@comment) do |f| %>

答案 1 :(得分:0)

我认为您必须使用:

<%= form_for [:admin, @comment] do |f| %>

这是一个很好的参考:form_for and scopes, rails 3