所以我在rails 4中构建一个应用程序,我有一些条件决定用户可以在页面上看到或看不到的内容,例如,如果用户创建了一个项目 - 他们可以看到编辑/删除该项目的选项,而其他人则不能。这是一段代码,它们存在于项目#show view:
中 <!-- make sure only the creator can edit or add updates -->
<% if current_user == @project.user || current_user.admin == true %>
<ul>
<li><%= button_to "Edit", edit_project_path(@project), method: :get, class: "btn btn-primary" %></li>
<li><%= button_to "Add Update", new_project_update_path(:project_id => @project.id), method: :get, class: "btn btn-primary" %></li>
</ul>
<%end%>
问题是当用户没有登录分页符时因为current_user = nil而且rails并不知道如何处理。有什么不同的解决方法?我想在应用程序控制器(可能)中添加一些东西,它会自动将访客用户分配给每个人,直到他们明确登录(没有他们必须以访客身份登录),因为我希望人们能够查看某些页面而不需要必须做任何事情。我试过了,但没有成功。任何建议都表示赞赏。
答案 0 :(得分:0)
您可以检查是否先设置了current_user
<% if current_user && (current_user == @project.user || current_user.admin == true) %>
或更具体地说
<% if !current_user.nil? && ( other conditions) %>
答案 1 :(得分:0)
快速将条件权限检查放入您的视图成为维护的噩梦。考虑当您决定要添加另一个名为“协作者”的用户类型时,会发生什么,该用户类型可以查看项目,但不能编辑它们。您需要在应用程序中搜索每个视图并查找项目的每个链接并更改条件。
你添加另一个图层...就像你想要暂停一些项目的合作者而不是其他项目...所有这些条件都会进入视图(他们真的没有业务)。 AND 他们也需要在控制器中复制 - 只是因为用户看不到链接,并不意味着他们无法编辑URL和更改表单目标。因此,您需要在操作中仔细检查所有权限,如果尝试手动将它们保持同步是一种非常脆弱的方法。
你真正想做的是你的问题是什么......如果可以的话,只需要一个链接,如果他们不能,就不要链接。
这正是cancan gem的语法。