是否可以为不同类型的用户rails ruby呈现相同URL的不同控制器和模板。
我希望向设计人员和管理员用户显示不同的页面,并为一般用户显示相同网址的不同页面
答案 0 :(得分:1)
选项1:将不同类型的用户重定向到同一网址的不同控制器和模板。请注意,这将涉及到浏览器的额外往返。
选项2:对于同一控制器的相同操作,设计人员和管理员只需拥有两个不同的模板。当然,操作必须使用条件语句来正确设置实例变量。
选项3 :根据目前视图的不同程度以及如何构建应用程序,您还可以使用presenter。通过一些聪明的属性命名,这很容易成为最简单的维护解决方案。
我不想重写/重复代码。我如何使用其他控制器的代码,并呈现不同的模板 - C J
你没有提到你已经在某处做过那个动作。然后,您正在寻找可以从您的控制器调用的编写帮助程序 - 现有控制器和响应此URL的控制器。
答案 1 :(得分:0)
TL; DR 没有标准的方法,可能是可能的,但肯定不可取。
路由和约束适用于请求,如果设计人员和管理员用户指向相同的网址,则会相同。所以定义路由的标准rails方式不允许你在这里指定不同的约束,除非你在头文件中有你的角色,这将是一件非常糟糕的事情。
话虽如此,您可以使用授权宝石,例如cancan(尚未在Rails 4上提供),这可以让您执行
之类的操作<% if can? :update, @article %>
<%= link_to "Edit", edit_article_path(@article) %>
<% end %>
在视图和
中def show
@article = Article.find(params[:id])
authorize! :read, @article
end
在控制器中指定允许执行操作的人员。如果你有两个不同的网址/designers/foo
和/admin/foo
,它们应该指向不同的控制器,但可以通过标准的Ruby模块轻松共享代码。
require 'foo_actions'
module Designers
class FooController
include FooActions
end
end
通过这种方式,您可以使用指向独立控制器和正确视图但没有重复代码的干净URL。