如何处理生成的内容取决于当前用户授权的情况?

时间:2012-07-31 16:56:04

标签: ruby-on-rails ruby ruby-on-rails-3 model-view-controller implementation

我正在使用Ruby on Rails 3.2.2,自从我的系统实现以来,我想生成不同的输出(在视图中)和/或检索不同的记录(在控制器中),具体取决于“access- “用户授权(例如,授权可能取决于”access- ed “用户还是当前的“access- er ”用户)。

我该如何处理这种情况?也就是说,例如,为了处理用户是否是当前用户并因此显示不同的内容,我应该为每种情况实现两个视图文件和/或控制器操作,还是应该使用if else语句直接在视图文件和/或控制器动作中?

2 个答案:

答案 0 :(得分:0)

我通常在视图中使用if else语句,如果语句之间有很多标记以保持清洁,则渲染部分语句。

这是一种风格选择,但如果您发现自己在每个页面都制定了大量条件,那么您可能需要重新考虑控制器中的组织,甚至创建新资源。对于简单的事情,例如,如果用户是管理员,则添加“编辑”或“删除”按钮,我会在视图中使用条件。

对于.html.erb标记,你可以像这样执行正常的if / else块:

<% if <condition> %>
  <%= render 'partial_name' %>
<% else %>
  <p>Some other content</p>
<% end %>

条件是您的条件,例如current_user? @user

答案 1 :(得分:0)

我建议更清洁的方法是为用户创建不同的角色并对其进行分组。因此,对于该特定组,您可以拥有单独的视图文件和控制器。这种方法的一个优点是读取代码非常容易,我们可以很容易地理解代码。我们可以轻松控制页面,而无需担心其他用户。我们甚至可以避免使用许多过滤器。但是如果只有两种类型的用户,那么可以使用if else语句轻松管理,因此选择正确的方法也将取决于问题。