Ruby on rails 在rails应用程序中,如何允许来自特定型号的用户查看页面,而其他用户则受到限制?

Ruby on rails 在rails应用程序中,如何允许来自特定型号的用户查看页面,而其他用户则受到限制?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个使用Desive进行身份验证的用户模型。我还有一个userinfostudents模型和一个雇主模型。雇主和用户信息都使用注册模式注册。然后他们选择继续当雇主或学生 如果他们继续作为学生,他们将被要求填写一些信息。 每个学生填写的信息将在其用户界面中显示给他们 配置文件页面“userinfoshow”。所有学生的信息将被删除 显示在userinfoindex页面中。 然后,如果他们继续担任雇主,他们必须填补一些不同的空缺 适用于他们的信息。他们的信息仅显示在他们的 个人资料页面emplo

我有一个使用Desive进行身份验证的用户模型。我还有一个userinfostudents模型和一个雇主模型。雇主和用户信息都使用注册模式注册。然后他们选择继续当雇主或学生

如果他们继续作为学生,他们将被要求填写一些信息。 每个学生填写的信息将在其用户界面中显示给他们 配置文件页面“userinfoshow”。所有学生的信息将被删除 显示在userinfoindex页面中。 然后,如果他们继续担任雇主,他们必须填补一些不同的空缺 适用于他们的信息。他们的信息仅显示在他们的 个人资料页面employershow。 如果我只想让雇主看到userinfoindex页面,我该怎么做?这意味着,如果你注册为学生,你只能看到你的个人资料userinfoshow,而不能看到userinfoindex。雇主可以看到userinfoindex和userinfoshow

用户模型:

class User < ActiveRecord::Base
  has_one :userinfo
  has_one :employer

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end
用户信息模型:

class Userinfo < ActiveRecord::Base
    belongs_to :user
end

def info_complete?
    name? && email? && college? && gpa? && major?
end
雇主模式:

class Employer < ActiveRecord::Base
    belongs_to :user
end

def info_complete?
    name? && company? && position? && number? && email?
end
我的迁移:

设计用户创建用户。rb 创建_userinfos.rb 将用户id添加到userinfos.rb 创建_employers.rb 将用户id添加到雇主.rb
尽管这里没有显示,但我在每个模型中都有一个独特的功能,用于检查学生信息是否已输入到userinfo模型中,以及雇主信息是否已输入到雇主模型中。我把它们放在那里是因为当用户注册时,程序会检查是否已经输入了学生信息或雇主信息,如果已经输入,他们就不必选择雇主或学生。因为他们已经选择了。我的问题是,我可否不使用这两项功能来检查他们是雇主还是学生?比如,如果填写了学生信息,他们就是学生,因此不允许他们查看索引页。我只是不知道如何实现它。

向用户模型中添加角色可以解决此问题。我建议使用rails的枚举功能并添加雇主/学生角色,然后在显示页面之前在应用程序控制器中编写一个helper方法来检查当前用户是否是雇主/学生。

因此,我将分两部分来做。首先,对于模型:

class User < ActiveRecord::Base
     ...

     def user_type
         return :user if self.userinfo.present?
         return :employer if self.employer.present?
         return :no_role
     end
end

对于一个长期的解决方案,如果你有不同的角色考虑考虑一个角色管理宝石像PunDIT或C.C.对于短期简单项目,此解决方案将起作用。

需要明确的是,雇主模型包含有关用户的信息,只有当用户是雇主时才能填写这些信息?这些名字听起来像是雇主有关于用户雇主的信息。此外,在您的应用程序中,用户是否可能同时拥有雇主和用户信息?@Max-Hey-Max!是的,关于第一个问题。只有当此人是雇主时,才能填写雇主模型信息。不,用户不可能同时拥有userinfo和雇主。在设置方式上,一旦用户注册,程序就会检查是否填写了userinfo模型或雇主模型。如果两者都未填写,则用户将被发送到一个页面,在该页面中,他们必须选择自己是雇主还是学生用户信息。由于用户选择后无法更改,因此用户只能拥有雇主或用户信息。您可以使用Desive提供的助手吗?@SebastiánPalma嘿,兄弟!由于雇主和用户信息模型都属于用户,我无法确定用户是学生还是雇主。那么使用呢?嘿,莱利,请检查我问题的最后部分。我最近加的。
def index
     if current_user.user_type == :no_role
          redirect_to select_role_path, notice: "Please select your role before continuing"
          return
     elsif current_user.user_type == :user
          redirect_to some_safe_path, notice: "You do not have permission to view this page"
          return
     end

     ... continue with the normal code here
end