为什么我的form_for:blog指向/ blogs / new?

时间:2015-09-25 16:41:34

标签: ruby-on-rails routes form-for

我正在经历instance-variable-vs-symbol-in-ruby-on-rails-form-for SO帖子。

根据最多投票的答案

  

如果您使用符号:post it created

<img src="chio.jpg" id="kid"/>
  

如果您使用实例@post

     

对于@post = Post.new你会得到

<form action="/posts" method="post">

但是当我查看我渲染的html页面时

<form action="/posts/create" class="new_account" id="new_account" method="post">

用于

new.html.erb

<form action="/blogs/new" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="&#x2713;" />
<input type="hidden" name="authenticity_token" 
......

这引发了我的错误说

<%=form_for :blog do |f|%>
<%= f.text_field :title%>
<%= f.text_field :content%>
<%= f.submit :button %>
<% end %>

为什么发生路径不匹配?

3 个答案:

答案 0 :(得分:1)

form_for :blog的操作网址将是表单

的网址呈现

form_for "blog基于该对象的路径(在路线中定义)的动作网址与该对象的状态相结合

http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for

  

当模型是   由字符串或符号表示,如上例所示,如果是   :未指定url选项,默认情况下表单将被发送回   当前网址

答案 1 :(得分:1)

你所链接的答案相对较老,我相当不确定。

Rails的方法是使用实​​例变量。

然后您应该使用<%= form_for @Blog.new do |f| =>。这应该呈现为

<form action="/blogs" method="post">

答案 2 :(得分:1)

对于资源,您的表单应该适用于show.html.erbnew.html.erb。在这种情况下,您应该将表单分成部分_form.html.erb,并将:blog替换为实例变量:

_form.html.erb

<%=form_for @blog do |f|%>
  <%= f.text_field :title%>
  <%= f.text_field :content%>
  <%= f.submit :button %>
<% end %>

您的控制器操作应创建此实例变量:

BlogsController

def new
  @blog = Blog.new
end

def update
  @blog = Blog.find(params[:id])
end

最后,您的模板应该只调用部分

new.html.erb

render partial: :form

update.html.erb

render partial: :form