为什么我的 form_for :blog 指向 /blogs/new?
Why does my form_for :blog point to /blogs/new?
我正在经历 instance-variable-vs-symbol-in-ruby-on-rails-form-for 所以 post。
根据投票最多的答案
if you use symbol :post it creates
<form action="/posts" method="post">
if you use the instance @post
for @post = Post.new you will get
<form action="/posts/create" class="new_account" id="new_account" method="post">
但是当我查看呈现的 html 页面时
<form action="/blogs/new" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="✓" />
<input type="hidden" name="authenticity_token"
......
对于
new.html.erb
<%=form_for :blog do |f|%>
<%= f.text_field :title%>
<%= f.text_field :content%>
<%= f.submit :button %>
<% end %>
这让我出错说
Routing Error
No route matches [POST] "/blogs/new"
为什么会出现路径不匹配?
form_for :blog
的 url 操作将是 url 呈现该表单
form_for "blog
的 url 动作基于该对象的路径(在路由中定义)与该对象的状态相结合
http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for
When the model is
represented by a string or symbol, as in the example above, if the
:url option is not specified, by default the form will be sent back to
the current url
您链接的答案相对较旧,我敢肯定不再准确了。
Rails 方法是使用实例变量。
然后您应该使用 <%= form_for @Blog.new do |f| =>
。这应该呈现为
<form action="/blogs" method="post">
对于资源,您的表单对于 show.html.erb
和 new.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 %>
您的控制器操作应创建此实例变量:
博客控制器
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
我正在经历 instance-variable-vs-symbol-in-ruby-on-rails-form-for 所以 post。
根据投票最多的答案
if you use symbol :post it creates
<form action="/posts" method="post">
if you use the instance @post
for @post = Post.new you will get
<form action="/posts/create" class="new_account" id="new_account" method="post">
但是当我查看呈现的 html 页面时
<form action="/blogs/new" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="✓" />
<input type="hidden" name="authenticity_token"
......
对于
new.html.erb
<%=form_for :blog do |f|%>
<%= f.text_field :title%>
<%= f.text_field :content%>
<%= f.submit :button %>
<% end %>
这让我出错说
Routing Error
No route matches [POST] "/blogs/new"
为什么会出现路径不匹配?
form_for :blog
的 url 操作将是 url 呈现该表单
form_for "blog
的 url 动作基于该对象的路径(在路由中定义)与该对象的状态相结合
http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for
When the model is represented by a string or symbol, as in the example above, if the :url option is not specified, by default the form will be sent back to the current url
您链接的答案相对较旧,我敢肯定不再准确了。
Rails 方法是使用实例变量。
然后您应该使用 <%= form_for @Blog.new do |f| =>
。这应该呈现为
<form action="/blogs" method="post">
对于资源,您的表单对于 show.html.erb
和 new.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 %>
您的控制器操作应创建此实例变量:
博客控制器
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