【问题标题】:Rails association between User and Profile用户和配置文件之间的 Rails 关联
【发布时间】:2020-04-03 12:13:40
【问题描述】:

我正在考虑创建一个模型 UserRole。用户可以创建许多他们想要的角色。创建角色后,用户可以从列表中选择一个角色并分配给自己。因此,每个角色可以有多个用户,一个用户属于一个角色。但这似乎有点奇怪,因为角色应该首先存在。我不确定这是在用户和角色之间建立关系的正确方法,因为我希望用户可以编辑角色并应用于所有用户。

如果假设一个用户has_one角色和一个配置文件是belong_to用户,如果用户想要更新角色,他需要一个一个地编辑所有用户,这很浪费时间.这就是为什么我认为用户可以创建任意数量的角色,然后他们可以从列表中选择一个角色并分配给用户本身。

这是视图:

<%= form_for(@user, remote: true) do |f| %>

<%= f.text_field :email, class: "form-control", autofocus: true, autocomplete: "off" %>
<%= f.check_box :admin, class:"checkbox" %>
<%= f.check_box :owner, class:"checkbox" %>

<%= f.fields_for :user_role do |ff| %>
<%= ff.collection_select :role_id, @roles, :id, :role_name, include_blank: false %>
<% end %>             

<%= f.button "Create",  class: "btn btn-success" %>

<% end %>

我不确定我的想法是否正确,请指教。谢谢。

【问题讨论】:

  • 有线!一个用户改变了自己的角色,它改变了其他用户的角色!我想知道你怎么知道谁有权改变角色,谁改变了角色!
  • 用户没有改变自己的角色。相反,用户(例如经理)可以编辑他创建的角色,编辑后的角色将应用于关联的用户。比如你有5个员工,经理要换角色,经理要一一编辑。因此,经理可以创建角色列表,例如role_name 是分析师,is_accessible 设置为 false,则作为分析师的员工将无法访问其他功能。如果经理想要授予访问权限,他只需要编辑角色,那么该角色应该适用于所有分析师用户。

标签: ruby-on-rails activerecord associations


【解决方案1】:

这可以是 has_one :through 关系。

class User < ApplicationRecord
  has_one :user_role
  has_one :role, through: :user_role
end
class Role < ApplicationRecord
  has_one :user_role
  has_one :user, through: :user_role
end
class UserRole < ApplicationRecord
  belongs_to :user
  belongs_to :role
end

这里,那里User 将能够创建任意数量的角色。然后您可以将User 链接到他在连接表中选择的Role

【讨论】:

  • Mohammed,我按照您的解决方案,用户可以成功创建角色列表。但是现在我在创建新用户时遇到了问题,我想添加一个嵌套表单,即角色。既然用户只有一个角色并且还有连接表,我应该怎么做?
  • 使用 rails nested_attributesuser_role 保存在表格中
  • 我有 nested_attributes,但是 user_role 的嵌套表单没有显示出来。
  • 嗨 Mohammed,我已经编辑了我的问题并添加了表单。
【解决方案2】:

嗯,我认为 User 和 Role 具有一对 N 的关系。用户可以创建许多角色,但只能将其中一个分配给自己。如果您想知道“谁创建了该角色?”,角色也可以属于一个用户。 (你需要使用has_one :role_creator, class_name: "User", foreign_key: "role_creator_id"之类的东西)

【讨论】:

    猜你喜欢
    • 2015-09-03
    • 2016-08-30
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多