是否有軌道的方式/ Ruby來簡化我的路由代碼是優雅的,如:Rails:redirect_to'#{user.role} _url'我該如何做到這一點?
redirect_to的user.role + _url
這樣,如果用戶是他們將被路由到管理頁面管理員所以對其他用戶類型如此...
是否有軌道的方式/ Ruby來簡化我的路由代碼是優雅的,如:Rails:redirect_to'#{user.role} _url'我該如何做到這一點?
redirect_to的user.role + _url
這樣,如果用戶是他們將被路由到管理頁面管理員所以對其他用戶類型如此...
當然!
redirect_to send("#{user.role}_url")
在Ruby中,發送將執行接收機上的方法,而這正是你想要的。通常情況下,這將是這樣的:
@receiver_object.send(:admin_url)
但在全局命名空間的網址助手的工作,這樣你就可以發送給全球和它的工作。
測試簡單的方法:這個添加到控制器,看着它重定向你回家:
redirect_to send("root_path")
真棒,send()方法是我失蹤。 –
您可以使用render "#{user.role}"
。只要確保有名稱爲admin.html.erb的相應視圖等等。
我真的認爲redirect_to在這裏更合適。看起來他在概念上會通過一個新的URL進入一個新頁面。 –
我試過這個,但是它導致連接丟失,就像我試圖做標題和我的問題時一樣。有沒有更好的方式來做到這一點,當我有views/admin/index.html.erb –
有幾件事情你可以做,但沒有內置任何東西,會比send("#{user.role}_url")
簡單得多。一定要使用send() - 否則它將重定向到URL「/ admin_url」而不是調用admin_url助手。
其中一個這樣的其他解決方案是創建一個名爲'home'的操作,該操作將重定向到current_user的角色頁面。這將添加一個額外的重定向(稍微提高頁面加載時間),但它會使您的重定向簡單
redirect_to home_url
不幸的是,redirect_to「#{user.role} _url」由於某種原因對我不起作用,它只是在每次我放棄連接時嘗試一下。任何想法,爲什麼它這樣做? –
因爲你傳遞的是字符串「admin_url」而不是方法'admin_url',它被計算到字符串'users/admin'中。 – Andrew
嘗試發送(「#{user.role} _url」)。否則,它會重定向到「/ admin_url」,這不是你想要的。 –
也許是最好的辦法是使用url_for幫手。例如。
redirect_to url_for(:controller => users, :action => user.role)
這將產生/users/admin
或/users/guest
等
如果你想這樣做一個hackish的方式,你可以使用
redirect_to eval("#{user.role}_url")
小心,雖然路徑。你的字符串不工作的原因是它沒有被評估,所以redirect_to "admin_url"
不做任何事情,它只是一個沒有意義的字符串,重定向期望字符串是一個URL。
如果你評估它的工作,因爲redirect_to eval("#{user.role}_url")
打算先轉換成"admin_url"
調用admin_url
方法,它返回像users/admin
一些路徑的字符串,該字符串是重定向方法可用。
很酷,看起來像發送和評估都爲我的目的工作!我會upvote,但我很新,我不能 –
我真的很喜歡安德魯的回答,但你也可以做類似
redirect_to send(user.role.to_s + '_url')
你當然是對的,發送部分是我錯過的。 –
注,我補充說明了發生了什麼,以及爲什麼你的方法不適合我的答案。 – Andrew