何时在Rails视图中使用@以及何时使用符号?
-
10-07-2019 - |
题
<% 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我不得不说:专辑。我在我的观点中一直混淆这些,并且从不真正知道是否使用@符号或符号。是否有一条简单的规则可以明确说明何时使用?
解决方案
我要在这里休息片刻,但请耐心等待。
首先,我建议您使用 RESTful路由,因为这样您就可以访问某些Rails更好的方法和操作,例如能够:
form_for(@album) do |f|
根据该对象的#new_record?
状态让它运行到你想去的地方。
其次,在新的form_for
到位后,您将能够通过以下方式干预您的观点:
<%= f.text_field :title %>
而不是:
<%= text_field :album, :title %>
最后解释为什么变量在Rails中用@符号定义,也称为<!>“实例变量<!>”;
当你在Rails中定义一个实例变量时,它可以在该实例中用于整个请求,其中<!> quot; instance <!> quot;是ActionController
和ActionView
方法链被调用以进行所有渲染等等。将其定义为实例变量将使其在控制器中可用,在控制器中定义它之后调用的任何方法,助手,视图以及从控制器,帮助器或视图呈现的部分。
基本上,它适用于整个请求,但在模型中无法访问。
其他变量规范是类变量(@@some_useful_thing = 1
)和全局变量($some_other_useful_thing = 1
)和常量(ALL_IN_UP_CASE = 1
)。
其他提示
变量名前的@符号表示当前类中的实例变量。 :(冒号)前缀创建一个Symbol。在您的示例中,@album.id
将@album
实例变量的id发送到form_tag
,允许text_field
从数据库中读取该对象,并使用该对象中的相应数据填充表单域。您在<=>方法中传递的符号是<=>用于访问它从数据库创建的对象的特定属性的内容。然后,它将这些属性的值放入它生成的文本字段中。