Ruby中的“冒号”表示法

时间:2013-02-13 19:34:41

标签: ruby-on-rails ruby

我是Ruby的新手,并试图阅读/理解一些rb文件。我遇到过这条线。任何人都可以解释它在做什么(以及它背后的语法意义)?

@account = current_user.accounts.find(params[:id])
  • 1:什么是current_user?我grep了整个文件,但没看到它被声明的位置。 (嗯,我知道变量不需要在Ruby中声明,但是它没有用@符号引用,所以这可能不是变量?) 我应该在哪里找到current_user? (即,app/modelapp/view等?)

  • 2: :id的含义是什么? params看起来像一个数组,所以我猜:id不知何故意味着索引,但为什么在colon之前有id

由于

2 个答案:

答案 0 :(得分:3)

  

什么是current_user

通常很难区分局部变量和被调用的方法。这是因为()是可选的,并且经常被省略。在这种情况下,current_user是一个方法,在某个地方的mixin或superclass中声明,这就是为什么它不在此文件中。将current_user.accounts视为current_user().accounts,这应该说明正在发生的事情。

  

我应该在哪里找到current_user

最有可能的是,它在一个插件或gem中提供,用于处理项目的身份验证。如果不了解您的项目,很难提供更多建议。

  

:id的含义是什么? params

它正在从哈希中提取一个值,这是它的关键。在irb中,试试这个:

params = { :id => 123 }
puts params[:id] # => prints 123

所以params是一个哈希(有些语言称这种数据类型为关联数组或字典)。这是一种存储一组键/值对的方法。 somehash[somekey]表示法会在somekey中返回somehash的值。

:id本身就是一个象征。它有点像一个永远不会改变的字符串。对红宝石符号进行一些研究,以了解更多信息。

在rails中,params是一个特殊的哈希值。从此哈希中显示的请求中传递的值。因此,当您加载/books/:id时,路由/books/123将处于活动状态,这会在控制器中将params[:id]设置为123

答案 1 :(得分:0)

  1. 当前用户可能是由gem提供的。宝石的例子是Devise

  2. “params”是作为URI上的查询字符串传递的参数的哈希值。因此,“:id”将引用id参数的值。

  3. 示例:

    www.domain.com?id=abc会将params [:id]作为“abc”。