新手在这里...我正在经历,显然,这是一个古老的导轨教程。
要创建表单,他们有以下代码:
<%= start_form_tag(:action => 'create')%>
<%= text_field(:album, :title) %><br />
<%= text_field(:album, :artist) %><br />
<%= text_field(:album, :genre) %><br />
<%= datetime_select(:album, :release_date) %><br />
<%= submit_tag("Create") %>
<%= end_form_tag %>
此代码的Rails3语法是什么?
感谢。
答案 0 :(得分:21)
自Rails 1以来发生了很多变化,我真的对能够花时间坐下来使用Rails 3并了解差异的人印象深刻(1)。社区需要欢迎这些,RTFM的人没有帮助。这是我认为我可以提供帮助的地方。
我会在Rails 3中写出这样的内容:
<%= form_for(@album) do |f| %>
<p>
<%= f.label :title %>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :artist %>
<%= f.text_field :artist %>
</p>
<p>
<%= f.label :genre %>
<%= f.text_field :genre %>
</p>
<p>
<%= f.label :release_date %>
<%= f.datetime_select :release_date %>
</p>
<%= f.submit %>
<% end %>
哇,这么多变化!我们从哪里开始?顶线,当然!
form_for
是一种在Rails中存在一段时间的方法,并且在过去几次重大修订中变得非常有用。这个方法将在控制器中设置@album
变量并检查它以确定一些事情1)表格应该去哪2)字段的值应该是什么。
在这个阶段我应该提一下,应该提到你的app/views/albums/new.html.erb
现在应该是这样的:
<h2>New Album</h2>
<%= render "form" %>
OMG,更多新东西!没关系:render "form"
将呈现 app / views / albums / _form.html.erb 部分。这就是上面form_for
愚蠢现在应该居住的地方。为什么?让我继续解释。
在AlbumsController
的{{1}}行动中,你会有这样的事情:
new
def new
@album = Album.new
end
足够聪明:“嘿,这是一个新的form_for
资源,他可能想要转到这个表单的Album
行动,因为他是一个好孩子,遵循Rails惯例“,这正是它所做的。
除了:
这将引发一个异常,即没有定义create
方法。什么?
在Ruby on Rails 2中,RESTful路由变成了 Big Thing 。最好是你阅读routing guide,因为如果我解释它,我只会重复很多。基本上:RESTful路由是应用程序的URL路由的约定,它确定当我们对 / albums 进行POST(它是一个表格,记住?)时,这将转到{{1}行动。
但Rails如何知道这样做?
因为在你的 config / routes.rb 文件中你放了这行:
albums_path
这定义了控制器的“The Seven”默认操作的路由(索引,显示,新建,创建,编辑,更新和销毁)。说真的,请阅读routing guide以了解这个美丽的一切。
回到我们的小create
。它知道去resources :albums
寻找一个新的对象,这很酷。那么form_for
块参数是怎么回事?好吧,这是一个表单构建器对象,它允许我们从/albums
(以及很快,f
)操作为特定的Album
对象构建表单元素。当我们打电话:
new
我们正在做Rails 1相当于:
edit
Rails为了让你的观点更加干净,它只是一点点的合成糖。
我还在表单中添加了标签,因为用户需要知道他们填写的字段是什么。这里漂亮的部分是用户看不到<%= f.text_field :title %>
,但会看到{{1相反。对于<%= text_field :album, :title %>
,他们会看到“发布日期”。美丽。
在表单的最后,我使用:title
。这将生成一个提交按钮,如果Title
是新对象,则显示“创建相册”,如果是预先存在的对象,则显示“更新相册”。但是预先存在的对象在哪里被编辑?
在:release_date
行动!
f.submit
在 app / views / albums / edit.html.erb 文件中,您的 new.html.erb 兄弟中的内容与您的内容大致相同:< / p>
@album
你可以精确地使用这两个中的相同行来渲染相同的部分,但如果对象是新的或者它是预先存在的(通常称为持久化),它将以不同的方式执行)。
如果edit
操作呈现此部分,它将为表单生成到def edit
@album = Album.find(params[:id]
end
的路由,并对此资源执行Rails专业<h2>Editing Album</h2>
<%= render "form" %>
请求。我希望routing guide能够很好地解释另一件事。
我很抱歉这个答案很长,但这个问题没有真正简短的答案,这是一个很大的变化,但是当我说真的是好的时候相信我。
Rails 3 rock。
(1)对于没有的人不那么喜欢。
答案 1 :(得分:2)
我强烈建议你在使用RAILS Stuff时使用两个站点!!!
好消息是......两个站点都使用Rails 3进行更新!!!
是的,因为BBonifield指定你可以使用form_tag
答案 2 :(得分:0)
为什么不尝试Micheal Hartl's Rails Tutorial,它可能是开始使用Rails的最佳指南之一,RailsCasts.com也很酷。