Ruby on rails 有没有更干净的方法来实现这一点?

Ruby on rails 有没有更干净的方法来实现这一点?,ruby-on-rails,Ruby On Rails,我试图根据传递的不同信息仅显示表中的某些记录,如果没有满足任何要求,它将重定向到主页。代码都在运行,只是想看看其他人会如何处理这个问题 if current_user.admin? @schedules = Schedule.all elsif current_user.team_id? @schedules = Schedule.find_all_by_team_id(current_user[:team_id]) else redirect_to root_path, :stat

我试图根据传递的不同信息仅显示表中的某些记录,如果没有满足任何要求,它将重定向到主页。代码都在运行,只是想看看其他人会如何处理这个问题

if current_user.admin?
  @schedules = Schedule.all
elsif current_user.team_id?
  @schedules = Schedule.find_all_by_team_id(current_user[:team_id])
else
  redirect_to root_path, :status => 301, :alert => "Please contact your club administrator to be assigned to a team."
  return
end

解决问题的方法

@schedules = Schedule.all if current_user.admin?
@schedules = Schedule.find_all_by_team_id(current_user[:team_id]) if current_user.team_id?
if @schedules.nil?
  redirect_to root_path, :status => 301, :alert => "Please contact your club administrator 
    to be assigned to a team."
else
  #Your normal redirect
end

您应该始终将复杂的逻辑从控制器中移开

class Schedule
  def self.for(user)
    case user.role #you should define the role method in User
      when User::ADMIN
        scoped
      when User::TEAM
        where(team_id: user[:team_id])
    end
  end
end
在控制器中:

@schedules = Schedule.for(current_user)

redirect_to root_path, :status => 301, :alert => "Please contact your club administrator to be assigned to a team." unless @schedules

添加角色如何比使用
admin?
方法更好?似乎用更多的代码也能达到同样的效果。如果将来有两个以上的角色,可能需要使用case语句。