[Rails] Re: Multiple Select example?

brez! !! jbresnik at gmail.com
Thu Apr 27 07:32:47 GMT 2006


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/.


More information about the Rails mailing list