我正在使用 Ruby on Rails 3.2.2,并且由于我的系统实现,我想生成不同的输出(在视图中)和/或检索不同的记录(在控制器中)取决于“访问者”用户授权(对于例如,授权可能取决于“访问”用户是否是当前“访问者”用户)。
我该如何处理这种情况?也就是说,例如,为了处理用户是否是当前用户并显示不同的内容,我应该为每种情况实现两个视图文件和/或控制器操作,还是应该if else
直接在视图文件中使用语句和/或在控制器动作中?
我正在使用 Ruby on Rails 3.2.2,并且由于我的系统实现,我想生成不同的输出(在视图中)和/或检索不同的记录(在控制器中)取决于“访问者”用户授权(对于例如,授权可能取决于“访问”用户是否是当前“访问者”用户)。
我该如何处理这种情况?也就是说,例如,为了处理用户是否是当前用户并显示不同的内容,我应该为每种情况实现两个视图文件和/或控制器操作,还是应该if else
直接在视图文件中使用语句和/或在控制器动作中?
我通常在视图中使用 if else 语句,如果语句之间有很多标记以保持干净,则呈现部分语句。
这是一种风格选择,因此如果您发现您在每个页面上都创建了大量条件,那么您可能需要在控制器中重新考虑您的组织,甚至创建一个新资源。对于简单的事情,比如如果用户是管理员,则添加“编辑”或“删除”按钮,我会在视图中使用条件。
对于 .html.erb 标记,您可以像这样执行普通的 if/else 块:
<% if <condition> %>
<%= render 'partial_name' %>
<% else %>
<p>Some other content</p>
<% end %>
条件是您的条件,例如current_user? @user
我建议的一种更简洁的方法是为用户创建不同的角色并将它们分组。因此,对于该特定组,您可以拥有单独的视图文件和控制器。这种方法的一个优点是它很容易阅读代码,我们可以很容易地理解代码。我们可以轻松地对页面进行更多控制,而不必担心其他用户。我们甚至可以避免对许多过滤器的需要。但是如果只有两种类型的用户,则可以使用 if else 语句轻松管理,因此选择正确的方法也将取决于问题。