Ruby on rails 创建不同的类类型,避免单表继承或多态关联

Ruby on rails 创建不同的类类型,避免单表继承或多态关联,ruby-on-rails,Ruby On Rails,每个用户都有许多角色,每个角色都属于一个用户。有3种类型的角色-当有人注册并创建新用户时,会自动创建类型1和类型2。用户可以在以后的任何时候通过表单创建角色类型3。因此,我需要一种方法来告诉角色控制器中的创建操作要创建哪种类型的角色。我知道的唯一技术是将persona_类型传递给create操作。问题是,这会导致大规模分配攻击。用户不应选择角色类型。我的问题是,在允许的参数中不包括persona_类型的情况下,如何告诉create操作要创建哪个persona_类型 我相信STI或多态性关联是解决

每个用户都有许多角色,每个角色都属于一个用户。有3种类型的角色-当有人注册并创建新用户时,会自动创建类型1和类型2。用户可以在以后的任何时候通过表单创建角色类型3。因此,我需要一种方法来告诉角色控制器中的创建操作要创建哪种类型的角色。我知道的唯一技术是将persona_类型传递给create操作。问题是,这会导致大规模分配攻击。用户不应选择角色类型。我的问题是,在允许的参数中不包括persona_类型的情况下,如何告诉create操作要创建哪个persona_类型

我相信STI或多态性关联是解决这个问题的可能方法。然而,当这三种角色类型之间的差别很小时,这两种角色似乎都有些过分了。即使这些是最好的解决方案,我认为这是一个有趣的问题,知道如何在persona_params中避免persona_类型也是一件好事

在角色控制器中:

def create
  @persona = current_user.personas.build(persona_params)
  if ( @persona.persona_type==1 || @persona.persona_type==2 )
    if @persona.save
    # not sure what to do here
    else
    # not sure what to do here
    end
  end
  if @persona.persona_type==3
    if @persona.save
      flash[:success] = "Welcome, " + @persona.name
      redirect_to @persona
    else
      render 'new'
    end
  end
end
.
.
.
private

  def persona_params
    params.require(:persona).permit(:name, :persona_type)
  end

我不明白你的想法,我在问,如果没有:persona_输入persona_参数,是否有可能实现相同的功能。所以persona_params应该是:params.require:persona.permit:nameUsers不应该被允许选择他们正在创建的角色类型。如果:persona_type是允许的,这意味着他们可以选择。