我試圖理解為什么這會引發錯誤
before_filter :check_user_validity(params[:user_id])
錯誤:
syntax error, unexpected '(', expecting keyword_end before_filter :check_user_validity(params[:user_id])
但這不是:
before_filter -> { check_user_validity(params[:user_id]) }
為什么我們需要在過濾器之前使用 proc 或 lambda 來呼叫帶有引數的方法。
對于沒有引數的呼叫方法,它不會引發錯誤。
誰能給出引發錯誤的具體原因?
uj5u.com熱心網友回復:
這是因為 Rails 框架就是這樣設計的。
您不是在呼叫方法check_user_validity本身,而是呼叫一個特殊的ApplicationController類方法before_filter,傳遞一個帶有符號的引數,該符號是您要在某些操作之前呼叫的方法名稱。在你的情況下,它是:check_user_validity.
before_filter如果您希望使用某些引數呼叫您的方法,您也可以傳遞一個 lambda 。
此外,不需要傳遞params[:user_id]給此方法,因為所有控制器實體方法都可以訪問params. 所以你可以這樣:
def check_user_validity
user_id = params[:user_id]
...
end
uj5u.com熱心網友回復:
:check_user_validity是一個類似于字串的符號。您不能“運行”帶括號的符號。您實際上是在做類似'function_name'(...)無效語法的事情。
before_filter或before_action通過將函式名稱(通過使用符號)或函式(通過使用 proc/lambda)傳遞給它來作業,以便稍后在收到請求時呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/517314.html
標籤:轨道上的红宝石红宝石ruby-on-rails-3ruby-on-rails-4过滤前
上一篇:在不同條件下為每一行連接表
