我有一张表格:
form_for :comment, url: comment_path, method: :post do |f|
渲染后,变为
<form action="/comments/1" accept-charset="UTF-8" method="post">
我希望action
只有"/comments"
而没有id,因为这是创建新评论的实际路径。当然,我收到一条很好的错误消息,说我的路径无效:
No route matches [POST] "/comments/1"
...
comments_path GET /comments(.:format) comments#index
POST /comments(.:format) comments#create
...
我把错误归结为行动中的错误是什么?
答案 0 :(得分:4)
使用约定优于配置:
# comments/_form.html.erb
<%= form_for(@comment) %>
<% end %>
# comments/new.html.erb
<%= render partial: 'form' %>
当@comment
是新记录时,它将使用路径comments_path
,对于现有记录,它将使用comment_path(@comment)
并将方法设置为PATCH。这使您可以在不同的视图中使用相同的表单部分。
当您在正常CRUD操作之外执行某些操作时,您只需要设置path
和method
选项。
答案 1 :(得分:1)
您使用了comment_path
这是show / edit / destroy路线。请改用comments_path
。