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

时间:2014-09-11 18:01:05

标签: ruby-on-rails

每个用户拥有多个角色,每个角色属于一个用户。有三种类型的角色 - 当有人注册并创建新用户时,会自动创建类型1和类型2。用户可以随后通过表单随时创建角色类型3。因此,我需要一种方法来告诉Personas控制器中要创建的Persona类型的创建操作。我知道的唯一技术是将persona_type传递给create动作。麻烦的是,这使得它可以进行大规模分配攻击。 persona_type不应由用户选择。我的问题是,如何在不允许参数中包含persona_type的情况下告诉创建动作persona_type?

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

在人物角色控制器中:

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

0 个答案:

没有答案