【问题标题】:Restful routing - two users see different pages that perform the same functionRestful 路由 - 两个用户看到执行相同功能的不同页面
【发布时间】:2011-08-08 13:03:43
【问题描述】:

我有一个报告控制器和两种类型的用户:公司和客户。当他们去查看他们的主“报告”页面(即我通常所说的索引)时,他们看到的页面截然不同。

由于这些页面不同,但它们是每个用户各自的报告主窗口,那么以 RESTful 方式组织这些页面的最佳方式是什么?

到目前为止,我一直在做一些事情,比如 index(针对公司)和 custindex(针对客户)。有没有更好的办法?

注意:这些页面有不止几个简单的区别 - 否则一些基于用户类型的简单 ifcase 语句就足够了。

【问题讨论】:

  • 你所说的“几个简单的区别”是什么意思?
  • @Kleber S. - 我的意思是页面之间存在显着差异。

标签: ruby-on-rails ruby-on-rails-3 rest


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我不知道它是更好还是最差,但您也可以在每个控制器上使用一种称为“报告”的方法。所以它会分别处理每一个。

    因此,请在您的路线文件中轻松处理它。

    只是另一个想法。

    【讨论】:

    • 我不认为你可以从路由文件中处理它,因为逻辑基于用户的属性——两种类型的用户都将访问同一个 URL,所以他们会匹配相同的路线。我很确定控制器是放置它的正确位置,并且控制器可以决定要呈现哪个页面。上面建议的部分也可以,尽管它向视图添加了业务逻辑,这闻起来有点不对劲。
    • 两种类型的用户都可以重定向到唯一的 url,它们不必相同。可能是公司/报告和客户/报告之类的东西。我认为这种方式没有问题。
    【解决方案3】:

    我会避免触摸控制器,而是在视图中使用部分操作:

    #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 而不同)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多