我有一個報告控制器和兩種類型的用戶不同的網頁:公司和客戶。當他們查看他們主要的「報告」頁面(即我通常稱爲索引)時,每個人都會看到顯着不同的頁面。寧靜路由 - 兩個用戶看到,執行相同功能
因爲這些頁面是不同的,但每一個相應的用戶的主窗口上的報道,什麼是REST方式來組織這些最好的方法是什麼?
到目前爲止,我一直在做這樣的事情指數(對公司)和custindex(客戶)。有沒有更好的辦法?
注意:這些頁面有幾個簡單的差異 - 否則一些簡單的if
或case
基於用戶類型的陳述就足夠了。
我有一個報告控制器和兩種類型的用戶不同的網頁:公司和客戶。當他們查看他們主要的「報告」頁面(即我通常稱爲索引)時,每個人都會看到顯着不同的頁面。寧靜路由 - 兩個用戶看到,執行相同功能
因爲這些頁面是不同的,但每一個相應的用戶的主窗口上的報道,什麼是REST方式來組織這些最好的方法是什麼?
到目前爲止,我一直在做這樣的事情指數(對公司)和custindex(客戶)。有沒有更好的辦法?
注意:這些頁面有幾個簡單的差異 - 否則一些簡單的if
或case
基於用戶類型的陳述就足夠了。
我會避免觸摸控制器和做與分音的觀點:
#in app/views/users/index.html.erb
<common html, if any>
<%= render :partial => @user.kind #or whatever method you use to distinguis between them %>
<more common html, if any>
現在,你只需要一個「_customer.html.erb」和「_company.html.erb」部分在夾。
如果控制器代碼對每個用戶有點不同,你還會這樣做嗎? (鑑於用戶的不同「類型」,所需的查詢可能會與不同的HTML一起使用)。 – sscirrus 2011-04-20 00:31:34
,你可以在你的控制器檢查用戶類型:
def index
...
template = (@type == 'company') ? 'reports/index.html.erb' : 'reports/custindex.html.erb'
render :template => template
end
這意味着你會根據用戶類型有兩種不同的html.erb文件,但仍然有一個單一的「指數」行動,並呈現模板
我不知道這是好還是壞,但是你也可以在每個控制器上有一個稱爲「報告」的方法。所以它會分別處理每一個。
因此,治療上以簡單的方式你的路由文件。
只是另一種思路。
我不認爲你可以處理來自路由文件的內容,因爲邏輯基於用戶的屬性 - 這兩種類型的用戶都將使用相同的URL,因此他們會匹配到相同的路由。我很確定控制器是放置這個的正確位置,控制器可以決定要渲染哪個頁面。上面提出的部分也是可以的,儘管它增加了一個視圖的業務邏輯,這看起來有點不對。 – 2011-04-19 14:53:40
這兩種類型的用戶都可以重定向到唯一的url,它們不一定是相同的。可能就像公司/報告和客戶/報告一樣。我看到這種方式沒有問題。 – 2011-04-19 21:25:26
你的意思是'兩個簡單的差異'? – 2011-04-19 10:19:40
@Kleber S. - 我的意思是頁面在它們之間有顯着的區別。 – sscirrus 2011-04-19 10:38:55