如何将ActiveRecord对象作为参数传递给Rails中的Helper方法

时间:2012-11-01 18:50:55

标签: ruby-on-rails parameters helpermethods

许多辅助方法(如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 hash作为参数的情况下,form_for似乎能够接受局部变量。键是可以在partial中使用的locals,值是模板中的实例变量。这是正确的理解吗?

1 个答案:

答案 0 :(得分:0)

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

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