2011-04-19 44 views
0

我有一個報告控制器和兩種類型的用戶不同的網頁:公司和客戶。當他們查看他們主要的「報告」頁面(即我通常稱爲索引)時,每個人都會看到顯着不同的頁面。寧靜路由 - 兩個用戶看到,執行相同功能

因爲這些頁面是不同的,但每一個相應的用戶的主窗口上的報道,什麼是REST方式來組織這些最好的方法是什麼?

到目前爲止,我一直在做這樣的事情指數(對公司)和custindex(客戶)。有沒有更好的辦法?

注意:這些頁面有幾個簡單的差異 - 否則一些簡單的ifcase基於用戶類型的陳述就足夠了。

+0

你的意思是'兩個簡單的差異'? – 2011-04-19 10:19:40

+0

@Kleber S. - 我的意思是頁面在它們之間有顯着的區別。 – sscirrus 2011-04-19 10:38:55

回答

1

我會避免觸摸控制器和做與分音的觀點:

#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」部分在夾。

+0

如果控制器代碼對每個用戶有點不同,你還會這樣做嗎? (鑑於用戶的不同「類型」,所需的查詢可能會與不同的HTML一起使用)。 – sscirrus 2011-04-20 00:31:34

0

,你可以在你的控制器檢查用戶類型:

def index 
    ... 
    template = (@type == 'company') ? 'reports/index.html.erb' : 'reports/custindex.html.erb' 
    render :template => template 
end 

這意味着你會根據用戶類型有兩種不同的html.erb文件,但仍然有一個單一的「指數」行動,並呈現模板

0

我不知道這是好還是壞,但是你也可以在每個控制器上有一個稱爲「報告」的方法。所以它會分別處理每一個。

因此,治療上以簡單的方式你的路由文件。

只是另一種思路。

+0

我不認爲你可以處理來自路由文件的內容,因爲邏輯基於用戶的屬性 - 這兩種類型的用戶都將使用相同的URL,因此他們會匹配到相同的路由。我很確定控制器是放置這個的正確位置,控制器可以決定要渲染哪個頁面。上面提出的部分也是可以的,儘管它增加了一個視圖的業務邏輯,這看起來有點不對。 – 2011-04-19 14:53:40

+0

這兩種類型的用戶都可以重定向到唯一的url,它們不一定是相同的。可能就像公司/報告和客戶/報告一樣。我看到這種方式沒有問題。 – 2011-04-19 21:25:26