Objeto anidada w / casillas de selección en masa - incluso con la asignación accepts_nested_attributes_for?

StackOverflow https://stackoverflow.com/questions/727300

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 %>
¿Fue útil?

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 %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top