当前位置:  开发笔记 > 后端 > 正文

什么是Rails3相当于start_form_tag?

如何解决《什么是Rails3相当于start_form_tag?》经验,为你挑选了1个好方法。

新手在这里...我正在经历,显然,一个旧的铁路教程.

要创建表单,他们有以下代码:

<%= start_form_tag(:action => 'create')%>

        <%= text_field(:album, :title) %>
<%= text_field(:album, :artist) %>
<%= text_field(:album, :genre) %>
<%= datetime_select(:album, :release_date) %>
<%= submit_tag("Create") %> <%= end_form_tag %>

这段代码的Rails3语法是什么?

谢谢.



1> Ryan Bigg..:

自从Rails 1以来,已经发生了很多变化,我对那些愿意花时间坐下来使用Rails 3并了解差异的人印象深刻(1).社区需要欢迎这些,RTFM的人没有帮助.这是我认为我可以提供帮助的地方.

我会在Rails 3中这样写:

<%= form_for(@album) do |f| %>
  

<%= f.label :title %> <%= f.text_field :title %>

<%= f.label :artist %> <%= f.text_field :artist %>

<%= f.label :genre %> <%= f.text_field :genre %>

<%= f.label :release_date %> <%= f.datetime_select :release_date %>

<%= f.submit %> <% end %>

哇,这么多变化!我们从哪里开始?当然,顶线!

form_for是一种在Rails中存在一段时间的方法,并且在过去几次重大修订中变得非常有用.这个方法将@album在控制器中设置变量并检查它以确定一些事情1)表格应该去哪里2)字段的值应该是什么.

我应该在这个阶段提到应该提到你app/views/albums/new.html.erb现在应该是这样的:

New Album

<%= render "form" %>

OMG,更多新东西!没关系:render "form"app/views/albums/_form.html.erb渲染为局部.这就是上面的form_fortomfoolery应该生活的地方.为什么?让我继续解释.

在你AlbumsControllernew行动中,你会有这样的事情:

def new
  @album = Album.new
end

form_for足够聪明:"嘿,这是一种新Album资源,他可能想要create采取这种形式的行动,因为他是一个好伙伴并遵循Rails惯例",所以这正是它的作用.

除了:

这将引发一个异常,即没有albums_path定义方法.什么?

在Ruby on Rails 2中,RESTful路由变成了一件大事.最好是阅读路由指南,因为如果我解释它,我只会重复很多.基本上:RESTful路由是应用程序的URL路由的约定,它确定当我们对/ albums执行POST(它是一个表格,记住?)时,这将转到create操作.

但Rails如何知道这样做呢?

因为在你的config/routes.rb文件中你已经把这行:

resources :albums

这定义了路由器到控制器的"七个"默认操作(索引,显示,新建,创建,编辑,更新和销毁).说真的,阅读路线指南,了解这个美丽的一切.

所以回到我们的小form_for.它知道要去/albums寻找一个很酷的新对象.那么f块参数怎么了?好吧,这是一个表单构建器对象,它允许我们Album从我们new(很快edit)的操作中为特定对象构建表单元素.当我们打电话:

<%= f.text_field :title %>

我们正在做Rails 1相当于:

<%= text_field :album, :title %>

这只是Rails给你的一点点合成糖,以使你的观点更加干燥.

我还在表单中添加了标签,因为用户需要知道他们填写的字段是什么.这里漂亮的部分是用户看不到:title,但会看到Title.因为:release_date,他们会看到"发布日期".美丽.

在表格的最后,我使用f.submit.这将生成一个提交按钮,如果@album是新对象,则显示"创建相册";如果是预先存在的对象,则显示"更新相册".但是预先存在的对象在哪里被编辑?

edit行动中!

def edit
  @album = Album.find(params[:id]
end

在你的app/views/albums/edit.html.erb文件中,你的new.html.erb兄弟中有很多相同的东西:

Editing Album

<%= render "form" %>

您可以使用精确的在这两种线呈现相同的部分,但它会表现不同,如果对象是新的,或者如果它是预先存在的(通常被称为持久性).

如果edit动作呈现此部分,它将生成/albums/1表单的路径并PUT对此资源执行Rails专业请求.我希望路由指南能够很好地解释另一件事.

对于这个答案的长度我感到很遗憾,但这个问题没有真正简短的答案,这是一个很大的变化,但是当我说它确实变得更好时相信我.

Rails 3岩石.

(1)与不是的人相比较少.


另外:没有一个愚蠢的问题.应该分享知识,永远不要囤积.
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有