I make a carpooling application. When I want to create a new Route, I have this error:
ActiveModel::MassAssignmentSecurity::Error in RoutesController#create
Can't mass-assign protected attributes: place_ids
The Models are looking like this:
class Route < ActiveRecord::Base
# id :integer not null, primary key
# start_place_id :integer
# end_place_id :integer
# start_time :datetime
# end_time :datetime
# car_id :integer
belongs_to :car
has_many :places
has_and_belongs_to_many :users
attr_accessible :start_place_id, :end_place_id, :start_time, :end_time, :car_id
end
class Place < ActiveRecord::Base
has_many :routes
attr_accessible :name, :address, :lat, :long, :description
end
class Car < ActiveRecord::Base
has_many :routes
attr_accessible :car_type, :license_plate, :seats_num, :motorway_vignette_expeier
end
The _form.html.erb of the Routes looking like this:
<%= simple_form_for @route do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<%= f.association :places %>
<%= f.association :places %>
<%= f.input :start_time %>
<%= f.input :end_time %>
<%= f.association :car %>
<%= f.button :submit %>
<% end %>
The log is writing this:
Started POST "/routes" for 127.0.0.1 at 2012-03-23 15:41:37 +0100
Processing by RoutesController#create as HTML
Parameters: {"utf8"=>"✓", "route"=>{"place_ids"=>["", "4", "", "1"], "start_time(1i)"=>"2012", "start_time(2i)"=>"3", "start_time(3i)"=>"23", "start_time(4i)"=>"14", "start_time(5i)"=>"41", "end_time(1i)"=>"2012", "end_time(2i)"=>"3", "end_time(3i)"=>"23", "end_time(4i)"=>"14", "end_time(5i)"=>"41", "car_id"=>"1"}, "commit"=>"Create Route"}
Completed 500 Internal Server Error in 1ms
ActiveModel::MassAssignmentSecurity::Error (Can't mass-assign protected attributes: place_ids):
app/controllers/routes_controller.rb:15:in `new'
app/controllers/routes_controller.rb:15:in `create'
I don’t understand, why it makes a 4 element long array for place_ids (“place_ids”=>[“”, “4”, “”, “1”], ).
And I don’t understand, why it write MassAssignment, when I wrote in the model attr_accessible…
I did similar in rails 3.0.0, and it worked. I think simple_form changed something…
Why he write place_ids? Why not start_place_id and end_place_id?
I uploaded the full project to github: https://github.com/Koli14/telekocsi2
The environment is:
ruby 1.9.2p290
Rails 3.2.1
simple_form (2.0.1)
Ubuntu 11.10
I think you probably want another look at your associations. It seems to me that a route should belong to an end place and belong to a start place rather than have many places (unless you are including waypoints). A clue that this may be the case is the foreign keys in your route model.