初學rails,有幾個問題不懂。
class NamespaceConstraint
def self.matches?(request)
name = request.fullpath.split('/').second.downcase
if name[0] == '~' then name = name[1..-1] end
ns = Namespace.where(name_lower: request.fullpath.split('/').second.downcase).first
not ns.nil?
end
end
Rails.application.routes.draw do
constraints(NamespaceConstraint) do
get ':namespace' => 'namespaces#show'
end
end
這段程式碼大致上是什麼意思?
self.matches?
這個函數名問號是什麼意思?
這個request
變數名並沒有定義,是rails自動產生的嗎?
not ns.nil?
這個是啥意思?
ruby中約定帶 ? 的方法回傳值是true/false
request是rails controller中自訂的變量,同樣的對應的 response也是
not 是取反的意思,例如 not true就是false, ns.nil?回傳的是一個boolean類型, not取反
這個方法是用來匹配路由的,request.fullpath 回傳的是相對路徑例如blogs.com/blogs則回傳/blogs,那麼第一行最終取得的是'blogs',然後將'blogs'去找當前路由是否有與之相符的,有則true 無則false.
這些方法你都可以在本地嘗試一步步跑一遍,這不是個複雜的東西
雷雷