Ruby on rails 使用| |和#xA0时出现问题;(或)在if声明中
在我的项目控制器中,我有以下操作。如您所见,在呈现“show”视图时,如果调用了“check\u owner\u”或“check\u member”,则会检查用户是否是项目成员或管理员。如果不是这样,用户会收到一条错误消息并被重定向到根目录 当尝试该操作时,如果用户是管理员,则该操作有效,但如果用户是成员则无效。所以,“如果”!是你的主人!是_成员,因为如果我只尝试使用“如果”!他是你的会员 我做错了什么Ruby on rails 使用| |和#xA0时出现问题;(或)在if声明中,ruby-on-rails,ruby-on-rails-3,if-statement,Ruby On Rails,Ruby On Rails 3,If Statement,在我的项目控制器中,我有以下操作。如您所见,在呈现“show”视图时,如果调用了“check\u owner\u”或“check\u member”,则会检查用户是否是项目成员或管理员。如果不是这样,用户会收到一条错误消息并被重定向到根目录 当尝试该操作时,如果用户是管理员,则该操作有效,但如果用户是成员则无效。所以,“如果”!是你的主人!是_成员,因为如果我只尝试使用“如果”!他是你的会员 我做错了什么 before_filter :check_if_owner_or_member, :onl
before_filter :check_if_owner_or_member, :only => [:show]
def is_owner
Project.where("id = ? AND user_id = ?", params[:id], current_user.id).count > 0
end
def is_member
ProjectsUser.where("project_id = ? AND user_id = ?", params[:id], current_user.id).count > 0
end
def check_if_owner_or_member
if !is_owner || !is_member
redirect_to root_path
flash[:error] = "You don't have permission to the project!"
end
end
因为成员不是管理员,所以第一部分为true,第二部分不会执行。我想您应该在这里使用&。您应该像这样重构代码:
before_filter :check_if_owner_or_member, :only => [:show]
def is_owner?
Project.exists?(id: params[:id], user_id: current_user.id)
end
def is_member?
ProjectsUser.exists?(project_id: params[:id], user_id: current_user.id)
end
def check_if_owner_or_member
unless is_owner? || is_member? # as TheDude said, you probably meant && here
redirect_to root_path
flash[:error] = "You don't have permission to the project!"
end
end
它更具可读性,并且使用exists?
方法执行,比查找、计数和比较零更快