2012-05-12 11 views
10

Im trabajando con una forma de varios pasos (usando la gema Wicked). En los primeros dos pasos de la forma estoy editando el modelo de usuario y esos pasos funcionan bien. Luego intento el modelo de "intereses" que tiene una relación HABTM con el modelo de usuario. Sin embargo me sale este error:Error de rieles: no se puede asignar en masa los atributos protegidos: interest_ids?

ActiveModel::MassAssignmentSecurity::Error in UserStepsController#update 

Can't mass-assign protected attributes: interest_ids 
Rails.root: /Users/nelsonkeating/rails_projects/Oreminder1 

Application Trace | Framework Trace | Full Trace 
app/controllers/user_steps_controller.rb:12:in `update' 

user_steps_controller.rb

class UserStepsController < ApplicationController 
    include Wicked::Wizard 
    steps :standard, :personal, :interests, :dates 

def show 
    @user = current_user 
    render_wizard 
end 

def update 
    @user = current_user 
    @user.attributes = params[:user] 
render_wizard @user 
end 

end 

Aquí está la vista:

<%= render layout: 'form' do |f| %> 

<% for interest in Interest.find(:all) %> 
<label class="checkbox"> 
    <%= check_box_tag "user[interest_ids][]", interest.id, @user.interests.include?(interest) %> 
    <%= interest.name %> 
</label> 
<% end %> 

<% end %> 

¿Alguna idea? ¡Gracias!

+1

Si está en Rails 3.2.3 o posterior, ahora tiene que enumerar explícitamente en blanco todo lo que desee asignar en masa. ¿Podría ese ser el problema? Ver http://www.h-online.com/security/news/item/Rails-3-2-3-makes-mass-assignment-change-1498547.html. –

+0

Lo tengo en mi modelo de intereses: attr_accessible: name,: interest_ids – js111

+0

Debe establecerse en su modelo de usuario. – Mischa

Respuesta

21

Usted puede deshacerse de este error añadiendo esto a su modelo de usuario:

attr_accessible :interest_ids 

Sin este atributo interest_ids está protegido contra mass assignment y cuando intenta asignar valores a los que de todos modos se produce una excepción.

Cuestiones relacionadas