3

许多辅助方法,例如 redirect_to、link_to 和 url_for,可以将 ActiveRecord 对象作为参数,而不是指定控制器和操作的散列。我在不同的文档中看到参数以不同的方式传递。它有时作为符号传递,有时作为实例变量传递,有时作为局部变量传递。

我对如何扩展不同的参数样式以返回 url 感到困惑。我知道遵循 REST 约定应该创建一个由控制器和操作构造的 url,但不确定 Rails 何时需要特定的参数样式来构造该 url。请帮助我了解将 ActiveRecord 对象作为符号、实例变量或局部变量传递的用例。根据方法调用是否有不同的要求?还是在 url 构造上存在潜在差异?

这里有些例子:

从 API 文档:

link_to "Profile", @profile  
redirect_to post  
<%= url_for(@workshop) %>  
<%= form_for :person do |f| %> (this is described as the “generic #form_for”)

来自 Ruby on Rails 指南:

<%= link_to 'New book', new_book_path %>  
redirect_to(@book)  
form_for(@article)  

从 Rails 3 方式:

'link_to' "Help", help_widgets_path, :popup => 1  
redirect_to post  
url_for(timesheets_path)  
form_for offer do |f|  

注意:经过进一步研究,在调用视图模板传递 :locals 哈希作为参数的情况下,form_for 似乎能够接受局部变量。键是可以在局部中使用的局部变量,值是模板中的实例变量。这是正确的理解吗?

4

1 回答 1

0
  • 您可以将对象传递给 link_to 和 url_for
  • 您还可以将对象传递给路径助手
  • @post和都是post对象。@post 是一个实例变量,而 post 要么是一个局部变量,要么是一个返回帖子的方法

唯一“奇怪”的是form_for :post品种。这是老式的 Rails 语法,并将其更改为form_for @post引擎盖下的语法。

于 2012-11-02T13:09:52.077 回答