我是ruby on rails的新手,我正在使用mac osx上的2.3版本。 我正在尝试创建一个脚手架创建的相同功能,但我自己。 我创建了一个“post”控制器,视图和模型。 在后控制器中,我有以下内容:
class PostController < ApplicationController
def index
end
def new
@post = Post.new
end
end
在new.html.erb中,我有以下内容:
<h1>New Post</h1>
<% form_for :post do |f| %>
<%= f.text_field :title %>
<% end %>
我注意到在scaffold生成的代码中,使用实例变量@post作为form_for帮助器。如果传递符号,为什么他们在脚手架生成的表单中使用实例变量:form infor中的post执行完全相同的操作,而符号需要更改路由的配置?
非常感谢你, 尤瓦答案 0 :(得分:16)
如果您使用符号:post it created
<form action="/posts" method="post">
如果您使用实例@post
对于@post = Post.new你会得到
<form action="/posts/create" class="new_account" id="new_account" method="post">
对于@post = Post.find(1)你会得到
<form action="/posts/update" class="edit_account" id="edit_account_1" method="post">
<input name="_method" type="hidden" value="put">
如果你的新版本和编辑有不同的表格没什么大不了的,但是比你的新版本和你的编辑表格更相似或接近它
因此,如果您使用实例变量@post,您可以将所有表单代码放入_form并只调用partial,如果您传入新记录或现有记录,它将处理其余部分
答案 1 :(得分:0)
一个可能的原因是它使表单的代码创建一个新帖子更类似于表单代码来更新现有帖子。