Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Restful路由-两个用户看到执行相同功能的不同页面_Ruby On Rails_Ruby On Rails 3_Rest - Fatal编程技术网

Ruby on rails Restful路由-两个用户看到执行相同功能的不同页面

Ruby on rails Restful路由-两个用户看到执行相同功能的不同页面,ruby-on-rails,ruby-on-rails-3,rest,Ruby On Rails,Ruby On Rails 3,Rest,我有一个报表控制器和两种类型的用户:公司和客户。每个人在查看主“报告”页面(即我通常称之为索引的页面)时都会看到截然不同的页面 因为这些页面是不同的,但它们是每个用户报告的主窗口,所以以RESTful方式组织这些页面的最佳方式是什么 到目前为止,我一直在做一些类似索引(针对公司)和客户索引(针对客户)的工作。有更好的办法吗 注意:这些页面有很多简单的区别-否则一些基于用户类型的简单if或case语句就足够了。您可以在控制器中检查用户类型: def index ... template =

我有一个报表控制器和两种类型的用户:公司和客户。每个人在查看主“报告”页面(即我通常称之为索引的页面)时都会看到截然不同的页面

因为这些页面是不同的,但它们是每个用户报告的主窗口,所以以RESTful方式组织这些页面的最佳方式是什么

到目前为止,我一直在做一些类似索引(针对公司)和客户索引(针对客户)的工作。有更好的办法吗


注意:这些页面有很多简单的区别-否则一些基于用户类型的简单
if
case
语句就足够了。

您可以在控制器中检查用户类型:

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

这意味着您将有两个不同的html.erb文件,但仍有一个“索引”操作,并根据用户类型呈现模板

我不知道它是好是坏,但您也可以在每个控制器上使用一个名为“报告”的方法。因此,它将分别处理每一个

因此,在您的routes文件中以简单的方式处理该问题


另一个想法。

我会避免触摸控制器,并在视图中使用partials进行操作:

#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>
#在app/views/users/index.html.erb中
@user.kind#或您用来区分它们的任何方法%>

现在您只需要一个“\u customer.html.erb”和一个“\u company.html.erb”部分位于该文件夹中。

你所说的“两个简单的差异”是什么意思?@Kleber S.-我的意思是页面之间存在显著差异。我认为你无法从路由文件中处理这一点,因为逻辑是基于用户属性的-两种类型的用户都指向相同的URL,因此它们将匹配到相同的路由。我非常确定控制器是放置此内容的正确位置,并且控制器可以决定渲染哪个页面。上面建议的部分也可以,尽管它向视图中添加了业务逻辑,这听起来有点错误。两种类型的用户都可以重定向到唯一的url,但它们不必是相同的。可能类似于公司/报告和客户/报告。我认为这种方式没有问题。如果控制器代码对每个用户都有点不同,您还会这样做吗?(考虑到用户的不同“类型”,所需的查询可能会随着HTML的不同而有所不同)。