[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