2012-05-12 24 views
10

Im làm việc với một biểu mẫu nhiều lần (sử dụng đá quý Wicked). Trong vài bước đầu tiên của biểu mẫu, tôi đang chỉnh sửa mô hình người dùng và các bước đó hoạt động tốt .. Sau đó, tôi thử mô hình "sở thích" có mối quan hệ HABTM với mô hình người dùng. Tuy nhiên tôi nhận được lỗi này:Lỗi Rails: Không thể gán khối lượng thuộc tính được bảo vệ: 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 

Heres xem:

<%= 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 %> 

Bất kỳ ý tưởng? Cảm ơn!

+1

Nếu bạn đang ở trong Rails 3.2.3 hoặc mới hơn, bây giờ bạn phải rõ ràng danh sách trắng bất cứ điều gì bạn muốn gán hàng loạt. Có thể đó là vấn đề? Xem http://www.h-online.com/security/news/item/Rails-3-2-3-makes-mass-assignment-change-1498547.html. –

+0

Tôi đã đặt trong mô hình sở thích của mình: attr_accessible: name,: interest_ids – js111

+0

Nó phải được đặt trong mô hình người dùng của bạn. – Mischa

Trả lời

21

Bạn có thể thoát khỏi lỗi này bằng cách bổ sung này để mô hình người dùng của bạn:

attr_accessible :interest_ids 

Without này thuộc tính interest_ids được bảo vệ chống lại mass assignment và khi bạn cố gắng để gán giá trị cho nó anyway một ngoại lệ được ném.

Các vấn đề liên quan