我正在经历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="✓" />
<input type="hidden" name="authenticity_token"
......
这引发了我的错误说
<%=form_for :blog do |f|%>
<%= f.text_field :title%>
<%= f.text_field :content%>
<%= f.submit :button %>
<% end %>
为什么发生路径不匹配?
答案 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.erb
和new.html.erb
。在这种情况下,您应该将表单分成部分_form.html.erb
,并将:blog
替换为实例变量:
<%=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
最后,您的模板应该只调用部分
render partial: :form
render partial: :form