2017-04-09 71 views
1

目前我使用的是被鏈接到像一個單一的路徑的自定義約束:可以將自定義約束路由到多個控制器操作?

get '/hello', to: 'account#index', 
     constraints: AccountConstraint.new 

基本上我的自定義約束仰視request.host,並且如果在數據庫中找到匹配項?方法將返回true,然後帳戶#索引操作將被調用。

我想要做的是,如果約束匹配,那麼基於路徑將執行不同的操作。

所以我的約束是這樣的:

class AccountConstraint 
    def matches?(request) 
    # lookup the database, return true if record found 
    end 
end 

然後我想我route.rb文件做這樣的事情(僞代碼below_:

if AccountConstraint matches 
    get '/', to: "account#index" 
    get '/hello', to: "account#hello" 
end 

是這樣的可能嗎?如果是這樣,怎麼樣?

+0

我會在控制器內寫入那種邏輯,而不是在路由文件中。您可以檢查控制器,如果請求匹配,甚至在視圖中。 –

+0

你應該使用控制器從控制器中的請求中檢查引用者/主機,而不是路由並相應地重定向...它會好得多。 – Mayank

回答

2

我不知道我是否理解這個問題,但它聽起來像你想要的是一個scope

scope constraints: AccountConstraint.new do 
    get '/', to: "account#index" 
    get '/hello', to: "account#hello" 
end 

只有在AccountConstraint匹配的情況下,才能訪問範圍內的路由。

相關問題