0

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

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

  • 2:是什么意思:idparams看起来像一个数组,所以我想:id不知何故意味着索引,但为什么会有colonbefore id

谢谢

4

2 回答 2

3

什么是current_user

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

我应该在哪里找到current_user

最有可能的是,它在处理项目身份验证的插件或 gem 中提供。在不了解您的项目的情况下,很难提供更多建议。

是什么意思:idparams

它通过它的键从哈希中提取一个值。在 irb 中,试试这个:

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

所以 params 是一个散列(一些语言将此数据类型称为关联数组或字典)。这是一种存储一组键/值对的方法。该somehash[somekey]表示法返回somekeyin的值somehash

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

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

于 2013-02-13T19:43:27.950 回答
0
  1. Current user is likely provided by a gem. Example of a gem would be Devise.

  2. "params" is a hash of the parameters passed as the query string on the URI. So, ":id" would reference the value of the id parameter.

Example:

www.domain.com?id=abc would yield params[:id] as "abc".

于 2013-02-13T19:41:03.987 回答