Found it! FYI if it comes up again:
-----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-----
--
Posted via http://www.ruby-forum.com/.