我正在浏览instance-variable-vs-symbol-in-ruby-on-rails-form-for所以发帖。
根据投票最多的答案
如果使用符号:post创建
<form action="/posts" method="post">如果使用实例@post 对于@post = Post.new,您将得到
<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"为什么会出现路径错配?
发布于 2015-09-25 17:09:35
form_for :blog的操作url将是该表单的url呈现。
基于对象路径(在路由中定义)的form_for "blog的动作url与该对象的状态相结合
for
当模型由字符串或符号表示时(如上面的示例所示),如果未指定:url选项,默认情况下该表单将被发送回当前的url。
发布于 2015-09-25 17:19:52
你所联系到的答案是比较老的,我相当肯定不再准确了。
Rails的方法是使用实例变量。
然后您应该使用<%= form_for @Blog.new do |f| =>。这应该呈现为
<form action="/blogs" method="post">发布于 2015-09-25 17:30:11
对于资源,您的表单对于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 %>您的控制器操作应该创建这个实例变量:
BlogsController
def new
@blog = Blog.new
end
def update
@blog = Blog.find(params[:id])
end最后,模板应该只需调用部分
new.html.erb
render partial: :formupdate.html.erb
render partial: :formhttps://stackoverflow.com/questions/32786905
复制相似问题