mar*_*ion 5 ruby-on-rails ruby-on-rails-3
新手在这里...我正在经历,显然,一个旧的铁路教程.
要创建表单,他们有以下代码:
<%= 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 %>
Run Code Online (Sandbox Code Playgroud)
这段代码的Rails3语法是什么?
谢谢.
Rya*_*igg 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 %>
Run Code Online (Sandbox Code Playgroud)
哇,这么多变化!我们从哪里开始?当然,顶线!
form_for是一种在Rails中存在一段时间的方法,并且在过去几次重大修订中变得非常有用.这个方法将@album在控制器中设置变量并检查它以确定一些事情1)表格应该去哪里2)字段的值应该是什么.
我应该在这个阶段提到应该提到你app/views/albums/new.html.erb现在应该是这样的:
<h2>New Album</h2>
<%= render "form" %>
Run Code Online (Sandbox Code Playgroud)
OMG,更多新东西!没关系:render "form"将app/views/albums/_form.html.erb渲染为局部.这就是上面的form_fortomfoolery应该生活的地方.为什么?让我继续解释.
在你AlbumsController的new行动中,你会有这样的事情:
def new
@album = Album.new
end
Run Code Online (Sandbox Code Playgroud)
form_for足够聪明:"嘿,这是一种新Album资源,他可能想要create采取这种形式的行动,因为他是一个好伙伴并遵循Rails惯例",所以这正是它的作用.
除了:
这将引发一个异常,即没有albums_path定义方法.什么?
在Ruby on Rails 2中,RESTful路由变成了一件大事.最好是阅读路由指南,因为如果我解释它,我只会重复很多.基本上:RESTful路由是应用程序的URL路由的约定,它确定当我们对/ albums执行POST(它是一个表格,记住?)时,这将转到create操作.
但Rails如何知道这样做呢?
因为在你的config/routes.rb文件中你已经把这行:
resources :albums
Run Code Online (Sandbox Code Playgroud)
这定义了路由器到控制器的"七个"默认操作(索引,显示,新建,创建,编辑,更新和销毁).说真的,阅读路线指南,了解这个美丽的一切.
所以回到我们的小form_for.它知道要去/albums寻找一个很酷的新对象.那么f块参数怎么了?好吧,这是一个表单构建器对象,它允许我们Album从我们new(很快edit)的操作中为特定对象构建表单元素.当我们打电话:
<%= f.text_field :title %>
Run Code Online (Sandbox Code Playgroud)
我们正在做Rails 1相当于:
<%= text_field :album, :title %>
Run Code Online (Sandbox Code Playgroud)
这只是Rails给你的一点点合成糖,以使你的观点更加干燥.
我还在表单中添加了标签,因为用户需要知道他们填写的字段是什么.这里漂亮的部分是用户看不到:title,但会看到Title.因为:release_date,他们会看到"发布日期".美丽.
在表格的最后,我使用f.submit.这将生成一个提交按钮,如果@album是新对象,则显示"创建相册";如果是预先存在的对象,则显示"更新相册".但是预先存在的对象在哪里被编辑?
在edit行动中!
def edit
@album = Album.find(params[:id]
end
Run Code Online (Sandbox Code Playgroud)
在你的app/views/albums/edit.html.erb文件中,你的new.html.erb兄弟中有很多相同的东西:
<h2>Editing Album</h2>
<%= render "form" %>
Run Code Online (Sandbox Code Playgroud)
您可以使用精确的同在这两种线呈现相同的部分,但它会表现不同,如果对象是新的,或者如果它是预先存在的(通常被称为持久性).
如果edit动作呈现此部分,它将生成/albums/1表单的路径并PUT对此资源执行Rails专业请求.我希望路由指南能够很好地解释另一件事.
对于这个答案的长度我感到很遗憾,但这个问题没有真正简短的答案,这是一个很大的变化,但是当我说它确实变得更好时相信我.
Rails 3岩石.
(1)与不是的人相比较少.
| 归档时间: |
|
| 查看次数: |
2670 次 |
| 最近记录: |