设计、角色和简单形式

Posted

技术标签:

【中文标题】设计、角色和简单形式【英文标题】:Devise, Roles and Simple Form 【发布时间】:2015-04-15 23:04:22 【问题描述】:

我在我的 rails 4 应用程序中使用设计、简单的表单和角色模型。

我有一个设计与用户模型配合使用的用户模型,并且我有一个单独的配置文件模型,其中包含用户将与之交互的所有可编辑功能。

我在我的注册表单中添加了字段,供用户提名他们的角色。角色在配置文件模型中定义。

我的注册表是(最后的输入字段是相关的):

<%= simple_form_for(resource, as: resource_name, :html => :id => "sign_up_user", url: registration_path(resource_name)) do |f| %>

<%= f.error_notification %>

<div class="form-inputs" style="padding-left:20%; text-align:left; color:black;">
  <%= f.input :first_name, placeholder: 'Enter your first name', autofocus: true, required: true, :input_html => :maxlength => 15, :size => 40 %>
  <%= f.input :last_name, placeholder: 'Enter your surname', autofocus: true, required: true, :input_html => :maxlength => 15, :size => 40 %>
  <%= f.input :email, placeholder: 'Enter email',  autofocus: true, required: true, :input_html => :maxlength => 35, :size => 40 %>
  <%= f.input :password, placeholder: 'At least 8 characters', required: true, :input_html => :maxlength => 15, :size => 40 %>
  <%= f.input :password_confirmation, placeholder: 'Confirm your password',  required: true, :input_html => :maxlength => 15, :size => 40 %>
  <%= f.input :role do %>
  <%= f.select :role, Role.all.map  |r| [r.name, r.id] , include_blank: true %>
  <% end %>
</div>

在我的个人资料模型(属于用户)中,我的角色定义为:

roles :admin, :manager, :student, :educator, :guest

我的用户表中还有一个字段供用户选择registration_role。我希望用户能够从角色注册表中的配置文件模型中定义的角色列表中进行选择(我认为 RoleModel 允许这样做)。

有谁知道如何在注册表单中包含一个具有角色列表(在配置文件模型中定义)的段,以便随后可以将选择存储为用户表中的“registration_role”?

谢谢

【问题讨论】:

我认为 Railscasts 有这样的视频,例如:railscasts.com/episodes/188-declarative-authorization 希望对您有所帮助。 【参考方案1】:

您可能想要使用嵌套属性(在您的用户表中添加一个 role_id)

<%= f.select(:role_id, Role.all.map |r| [r.zip_code,r.id])%>

然后只需调用 user.role 即可获取您需要的信息

【讨论】:

以上是关于设计、角色和简单形式的主要内容,如果未能解决你的问题,请参考以下文章

RBAC模型设计

设计模式——简单工厂模式

设计模式之简单工厂模式(创建型)

设计模式之简单工厂模式(创建型)

设计模式之工厂类模式非原创

菜单管理,权限管理,用户管理界面设计