Select-multiple for has_many association

I haven’t looked into this for several months, but there still doesn’t
seem to be an obvious way to generate a HTML select element for
choosing multiple items to be set for a has_many association.

Do something

Let’s see. There’s a handy helper method that results in code like this,
when used straightforwardly

<%= collection_select :person, :tasks,
Task.find(:all), :id, :description, {},
:multiple => true %>

Here’s the resulting HTML

Do something

Unfortunately, none of the options gets selected. When the form is
submitted, the resulting params are

“person” => { “tasks” => “1” }

Only the first selected item is transferred and, anyway, “1” is not a
task, it is a task id, so this won’t work.

Here’s the next attempt:

<%= collection_select :person, :task_ids,
Task.find(:all), :id, :description, {},
:multiple => true %>

Well, that blows up immediately as there is not such method as
person#task_ids. But we can add it manually:

class Person < ActiveRecord::Base
def task_ids

Now we get

Do something

That was almost good. How about this, then?

<%= collection_select :person, :task_ids,
Task.find(:all), :id, :description, {},
:multiple => true,
:name => ‘person[task_ids][]’ %>

Ah yes, that’s it. But why does it have to be so complicated?


Michael S.
mailto:[email protected]

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs