2011-04-19 37 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