什么是Rails 3相当于start form_tag?

时间:2010-10-12 23:37:53

标签: 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 %> 

此代码的Rails3语法是什么?

感谢。

3 个答案:

答案 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时使用两个站点!!!

  1. http://guides.rubyonrails.org/

  2. http://api.rubyonrails.org/

  3. 好消息是......两个站点都使用Rails 3进行更新!!!

    是的,因为BBonifield指定你可以使用form_tag

答案 2 :(得分:0)

为什么不尝试Micheal Hartl's Rails Tutorial,它可能是开始使用Rails的最佳指南之一,RailsCasts.com也很酷。