2013-02-13 159 views
0

我是Ruby的新手,並試圖閱讀/理解一些rb文件。我遇到了這條線。任何人都可以解釋它在做什麼(以及它背後的格局意義)?紅寶石中的「冒號」符號

@account = current_user.accounts.find(params[:id]) 
  • 1:是什麼current_user?我整理了整個文件,但沒有看到它被聲明的位置。 (嗯,我知道變量不需要在Ruby中聲明,但它沒有用@符號來引用,所以這可能不是變量?) 我應該在哪裏找到current_user

  • 2(即app/modelapp/view等):什麼是:id意思? params看起來像一個數組,所以我猜:id莫名其妙地意味着索引,但爲什麼id之前有colon

感謝

回答

3

什麼是current_user

通常很難區分局部變量和被調用的方法。這是因爲()是可選的,並且經常被省略。在這種情況下,current_user是一種方法,在某個地方用mixin或superclass聲明,這就是它不在此文件中的原因。想想current_user.accountscurrent_user().accounts,這應該說明那裏發生了什麼。

我應該在哪裏找到current_user

最有可能的是,它提供了一個插件或gem來處理項目的身份驗證。如果不瞭解更多關於您的項目的信息,很難提供更多的建議。

:id是什麼意思? params

它從一個哈希值中提取一個值,通過它的關鍵。在內部評級法,試試這個:

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

所以params爲哈希(有些語言稱此數據類型關聯數組或字典)。這是一種存儲一組鍵/值對的方法。 somehash[somekey]表示法返回somekey的值somehash

:id本身是一個符號。這有點像一個永不改變的字符串。對ruby符號進行一些研究以瞭解更多信息。

而在rails中,params是一個特殊的散列。從請求中傳遞的值顯示在此散列中。因此,當您加載/books/123時,路徑/books/:id將會激活,這會在控制器中將params[:id]設置爲123

0
  1. 當前用戶可能是由寶石提供。寶石的例子是Devise

  2. 「params」是作爲查詢字符串傳遞給URI的參數的散列值。所以,「:id」會引用id參數的值。

實施例:

www.domain.com?id=abc將產生PARAMS [:ID]爲 「ABC」。