5
  <% form_tag(:action=>'update', :id=>@album.id) do %>

  Title: <%= text_field(:album, :title)  %><br>
  Artist: <%= text_field(:album, :artist)  %><br>
  Genre: <%= text_field(:album, :genre)  %><br>
  Release Date: <%= datetime_select(:album, :release_date, :start_year=>1960) %><br>

  <%= submit_tag("Update") %>

  <% end %>

在上面的例子中,我不得不在 form_tag 中说@album.id,但在 text_field 中我不得不说:album。我一直在我的观点中混淆这些,并且从来不知道是使用@符号还是符号。是否有一个简单的规则可以明确何时使用什么?

4

2 回答 2

14

我要在这里切线一会儿,但请耐心等待。

首先,我建议您使用RESTful 路由,因为这可以让您访问 Rails 的一些更好的方法和操作,例如:

form_for(@album) do |f|

#new_record?并让它根据该对象的状态确定您想去的地方。

其次,随着新form_for的到位,您将能够通过执行以下操作来干燥您的观点:

<%= f.text_field :title %>

代替:

<%= text_field :album, :title %>

最后解释一下为什么在 Rails 中变量之前定义有 @ 符号,也称为“实例变量”:

当您在 Rails 中定义一个实例变量时,它在该实例中可用于整个请求,其中“实例”是被调用以执行所有渲染ActionControllerActionView的方法链。将其定义为实例变量将使其在您的控制器、您在控制器中定义它后调用的任何方法、您的助手、您的视图以及从您的控制器、助手或视图呈现的部分中可用。

基本上,它适用于整个请求,但在您的模型中无法访问。

其他变量规范是类变量 ( @@some_useful_thing = 1) 和全局变量 ( $some_other_useful_thing = 1) 和常量 ( ALL_IN_UP_CASE = 1)。

于 2009-05-08T04:38:33.223 回答
6

变量名前的@符号指的是当前类中的一个实例变量。:(冒号)前缀创建一个符号。在您的示例中,将实例变量@album.id的 id 发送到,允许从数据库中读取该对象并使用来自该对象的适当数据填充表单字段。您在方法中传递的符号用于访问它从数据库创建的对象的特定属性。然后它将这些属性的值放入它生成的文本字段中。@albumform_tagform_tagtext_fieldform_tag

于 2009-05-08T03:32:33.273 回答