Objeto anidada w / casillas de selección en masa - incluso con la asignación accepts_nested_attributes_for?
-
05-09-2019 - |
Pregunta
pensé que debería haber sido una solución simple a este, ya que los carriles 2.3 cuenta con función de estas formas novedosas anidados. Básicamente quiero crear o actualizar un usuario y asignarles funciones al mismo tiempo.
Parece que estoy haciendo todo bien, pero me sale el error ADVERTENCIA: no puede masa asignar estos atributos protegidas:. Roles_attrributes
Yo incluso intentado cambiar la vista al usuario [permissions_attrributes] [ROLE_ID] porque pensé que tal vez la tabla de unión era confuso rieles.
De todas formas, alguna sugerencia sobre cómo debería funcionar esto en realidad?
Modelo
class User < ActiveRecord::Base
has_many :permissions
has_many :roles, :through => :permissions
accepts_nested_attributes_for :roles
accepts_nested_attributes_for :permissions
end
Extracto de vista (nótese que intentó sin éxito obtener fields_for para generar lo que quiero aquí, tal vez ese es mi problema?)
<% for role in Role.all %>
<%= check_box_tag( "user[roles_attrributes][id]",role.id) %>
<%= role.rolename %>
<br/>
<% end %>
Parámetros toparse parece ser correcta:
{"user"=>{"password_confirmation"=>"[FILTERED]",
"roles_attrributes"=>{"id"=>"2"}, ...
Solución Una combinación de mi falta de ortografía, no usar attr_accessible, que necesitan acceder a permissions_attributes, y la forma de ser ligeramente fuera.
Modelo:
has_many :permissions, :dependent => :destroy
has_many :roles, :through => :permissions
accepts_nested_attributes_for :permissions
attr_accessible :permissions_attributes
Ver:
<% Role.all(:order => "rolename ASC").each_with_index do |role,idx| %>
<%= check_box_tag( "user[permissions_attributes][#{idx}][role_id]",role.id) %>
<%= role.rolename %>
<br/>
<% end %>
Solución
suena como este atributo no está marcado como seguro para la actualización. Usted debe ser capaz de solucionarlo añadiendo la siguiente a la clase del modelo:
attr_accessible :roles
o posiblemente:
attr_accessible :roles_attributes
Si nos fijamos, puede que ya tenga un attr_accessible llamada, puede agregar esto a. Para obtener más información esto está documentado aquí:
http://api.rubyonrails.org/classes/ActiveRecord/Base .html # M002226
Otros consejos
Si corrige la ortografía de los atributos de la check_box_tag
, parece que debería funcionar.
<% for role in Role.all %>
<%= check_box_tag( "user[roles_attributes][id]",role.id) %>
<%= role.rolename %>
<br/>
<% end %>