[Rails] Collection Select Example?

Michael Koziarski koziarski at gmail.com
Wed Nov 24 06:55:22 GMT 2004


These two statements are pretty much exactly what I'm after.

@user.groups << Group.find(@params["add_ids"])
@user.groups.delete(Group.find(@params["delete_ids"])

However, looking at the logs makes me think it's doing 

SELECT* from groups WHERE ...

INSERT INTO user_groups ......

The select's seem rather redundant here.

Am I misreading the logs?  or is there a better way of doing this? 
perhaps making find lazily load the objects?


On Tue, 23 Nov 2004 21:03:26 -0800, Jeremy Kemper <jeremy at bitsweat.net> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Michael Koziarski wrote:
> | Nice, are there any functions like this for handling one to many
> | relations?  i.e a User has_and_belongs_to_many :groups.
> 
> collection_select requires a source object and an instance method.  With
> has_many, this method can be the foreign key.  But with
> has_and_belongs_to_many there is no corresponding instance method since
> the keys are in a separate join table, so you'll want to manage the
> parameters yourself.  Here's an example using
> options_from_collection_for_select to create a multiple select:
> 
> class User < ActiveRecord::Base
> ~  # id, name fields
> ~  has_and_belongs_to_many :groups
> end
> 
> class Group < ActiveRecord::Base
> ~  # id, name fields
> ~  has_and_belongs_to_many :users
> end
> 
> class UserController < AbstractApplicationController
> ~  model :user
> ~  def edit
> ~    case @request.method
> ~    when :get
> ~      @user = User.find(@params['id'])
> ~      @available_groups = Groups.find_all - @user.groups
> ~    when :post
> ~      @user = User.find(@params['user']['id'])
> ~      @user.groups << Group.find(@params['add_groups'])
> ~      redirect_to :action => 'show', :id => @user.id
> ~    end
> ~  end
> end
> 
> views/user/edit.rhtml
> <%= form_tag :action => 'edit' %>
> ~  <%= hidden_field 'user', 'id' %>
> ~  <select name="add_groups[]" multiple="multiple">
> ~    <%= options_from_collection_for_select @available_groups, 'id',
> 'name' %>
> ~  </select>
> </form>
> 
> Check out the relevant FormOptionsHelper documentation:
> http://ap.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M000075
> 
> Best,
> jeremy
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.2.6 (Darwin)
> Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
> 
> iD8DBQFBpBYeAQHALep9HFYRAk8qAKCbRIzv2GBiWGSfIsmlx1ZZYuodqQCePlV2
> 9tqGiLfiZTyocwJ1U9xMTmY=
> =vrPm
> -----END PGP SIGNATURE-----
> 


-- 
Cheers

Koz


More information about the Rails mailing list