我正在尝试允许用户仅在个人资料属于他们时才显示编辑按钮。目前,他们只允许编辑配置文件,如果它属于他们但我似乎无法隐藏按钮。到目前为止我有这个
<% if request.original_url == request.base_url + "current_user.id" %>
<%= link_to "Edit Profile", edit_user_path(current_user), class: "btn btn-primary btn-xs" %>
<% end %>
这就是我要比较的内容:
request.original_url =&gt;本地主机:3000 /用户/ random_user
request.base_url +“users /”+ current_user.id =&gt;本地主机:3000 /用户/ CURRENT_USER
提前致谢。
答案 0 :(得分:3)
<强>授权强>
为了给你一些观点,你会找到一个名为authorization的东西。
这与身份验证不同,因为它处理权限,而不是识别您的身份。我将在一分钟内了解它是如何工作的。
要解决您的问题,请执行以下操作:
//Book[bookId/text()='709F']/bookName/text()
我猜你在<%= link_to "Edit Profile", edit_user_path(current_user), class: "btn btn-primary btn-xs", if user_signed_in? && current_user == @user %>
动作上显示了这个动作,可以使用以下代码调用它:
user#show
这意味着如果您有以下路线:
#app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find params[:id]
end
end
您可以访问#config/routes.rb
resources :users
和@user
。值得注意的是current_user
!= current_user
。虽然@user
的答案很简洁,但它不会验证用户是否拥有授权页面的用户;只是用户已通过身份验证
因此,您有几个规范:
- 您需要知道用户是否实际登录
- 您需要确保您的
醇>weezing
用户拥有授权来编辑个人资料(IE是他们的)
我强烈建议您考虑使用logged-in
或CanCanCan
等gems
。我会告诉你CanCanCan:
#app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
can :edit, Article, id: user.id
end
end
#app/views/users/show.html.erb
<%= link_to "Edit", edit_user_path(@user) if can? :edit, @user %>
有Pundit
。
答案 1 :(得分:0)
这应该有效(稍微简单一些):
<% if current_user %>
<%= link_to "Edit Profile", edit_user_path(current_user), class: "btn btn-primary btn-xs" %>
<% end %>