I''m having issues getting checkboxes to update a cross-reference table
correctly. I keep seeing entries in the locations_users table, for
location_id and user_id, "11" and "2", respectively. The
user id is
fine, but there is no such location with id 11. There are only 5
locations and their ids go from 1-5! I can''t seem to find where the 11
is coming from.
This is in the view:
<% Location.find(:all).each do |location| %>
<input type="checkbox"
name="user[locations_ids][]"
value="<%= location.id %>"
<% if @user.locations.include?(location) %>
checked="checked"
<% end %> />
<%= location.name %>
<% end %>
This is in the controller:
[code=]def edit
@user = User.find(params[:id])
@locations = Location.find(:all)
@locationsusers = LocationsUser.new
end
def update
@user = User.find(params[:id])
@locations = Location.find(:all)
@locations.each do |location|
@locationsids = location.id
end
@locationsusers = LocationsUser.new(params[:locations_users])
@locationsusers.user_id = @user.id
@locationsusers.location_id = @locationsids.id
if @locationsusers.update_attributes(params[:locations_users])
flash[:notice] = ''User was successfully updated.''
redirect_to :action => ''list''
else
render :action => ''edit''
end
end
Have a look at the relevant parts of the output and notice how the
line...
"SELECT * FROM locations INNER JOIN locations_users ON locations.id
locations_users.location_id WHERE (locations_users.user_id = 2 )"
is not repeated in the ''update'' action:
Processing UserController#edit
Parameters: {"action"=>"edit",
"id"=>"2", "controller"=>"user"}
User Columns (0.001195) SHOW FIELDS FROM users
User Load (0.000083) SELECT * FROM users WHERE (users.`id` = 2)
LocationsUser Columns (0.000656) SHOW FIELDS FROM locations_users
Location Load (0.000129) SELECT * FROM locations
Rendering within layouts/user
Rendering user/edit
Location Load (0.000114) SELECT * FROM locations
Location Columns (0.000900) SHOW FIELDS FROM locations
Join Table Columns (0.000558) SHOW FIELDS FROM locations_users
Location Load (0.000327) SELECT * FROM locations INNER JOIN
locations_users ON locations.id = locations_users.location_id WHERE
(locations_users.user_id = 2 )
Processing UserController#update
Parameters: {"user"=>{"locations_ids"=>["1",
"3"]}, "commit"=>"Save
Data", "action"=>"updateLocation",
"id"=>"2", "controller"=>"user"}
User Columns (0.001231) SHOW FIELDS FROM users
User Load (0.000087) SELECT * FROM users WHERE (users.`id` = 2)
Location Load (0.000133) SELECT * FROM locations
Location Columns (0.000906) SHOW FIELDS FROM locations
LocationsUser Columns (0.000687) SHOW FIELDS FROM locations_users
SQL (0.000068) BEGIN
SQL (0.000209) INSERT INTO locations_users (`location_id`, `user_id`)
VALUES(11, 2)
SQL (0.004631) COMMIT
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---