Основная цель здесь - разрешить каждой роли пользователей просматривать и редактировать только некоторые поля других пользователей. Но роли будут постоянно расти, поэтому они должны быть динамичными.
У меня проблемы с созданием новой роли со списком всех полей пользователя, даже если связь еще не существует.
Мне бы хотелось:
<%= form.fields_for :role_assignment do |role_assignment_form| %>
<tr>
<td><%= role_assignment_form.text_field :user_field, disabled: true %></td>
<td><%= role_assignment_form.check_box :show_permission, id: :role_show_permission %></td>
<td><%= role_assignment_form.check_box :edit_permission, id: :role_edit_permission %></td>
</tr>
<% end %>
Чтобы загрузить как это:
User.attribute_names.map do |att|
role.role_assignment.find_by_user_field(att) || RoleAssignment.new(role: @role,user_field: att)
end
Отображается только текущие регистры. Я даже не знаю, где поставить код выше ...
Диаграммы базы данных для Role
и RoleAssignment
:
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(12) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int(12) | NO | PRI | NULL | auto_increment |
| id_role | int(12) | NO | | NULL | |
| user_field | varchar(255) | NO | | NULL | |
| show_permission | tinyint(1) | NO | | 0 | |
| edit_permission | tinyint(1) | NO | | 0 | |
+-----------------+--------------+------+-----+---------+----------------+
Модель:
class Role < ApplicationRecord
self.table_name = "role"
has_many :user_role, foreign_key: :id_role
has_many :user, through: :user_role
has_many :role_assignment, foreign_key: :id_role
accepts_nested_attributes_for :role_assignment, :reject_if => :all_blank, :allow_destroy => true
end
class RoleAssignment < ApplicationRecord
self.table_name = "role_assignment"
belongs_to :role, foreign_key: :id_role
end
Большое спасибо.