Thanks for the quick reply Julian. I will provide more detail here.
I have two tables: roles and permissions with a "has_and_belongs_to_many"
relationship between each other.
In the edit action for role, I initialize role and permissions like this:
@role = Role.find(@params[:id])
@permissions = Permission.find (:all, :order => "title")
In the model I have two lists: one with all the available permissions and
another with the permissions that a specific role has and buttons that move
stuff from one list to the other using javascript.
The rhtml code for the lists goes like this:
<select id="available_permissions" name="available_permissions" multiple
size="10">
<% available_permissions = @permissions - @role.permissions %>
<%= options_for_select (available_permissions.collect { |p| [p.title,
p.id]}) %>
</select>
<select id="role_permissions" name="role[permissions][]" multiple =
"multiple" size="10">
<%= options_from_collection_for_select(@role.permissions, "id", "title")
%>
</select>
I have two buttons invoke a javascript method to remove an item from one
list and add it to the other list. It goes like this:
function moveSelected(orig, dest)
{
var selectOrig = document.getElementById(orig);
var selectDest = document.getElementById(dest);
var i = 0;
while (i<selectOrig.length)
{
option = selectOrig.options[i];
if (option.selected)
{
option.selected = false;
selectOrig.remove(i);
if (nn6)
{
selectDest.length = selectDest.length+1;
selectDest.options[selectDest.length-1] = option;
}
else selectDest.add(option);
}
else i++;
}
}
This part works well with records that I added manually to the
permissions_roles intermediate table. Nevertheless the simple
if @role.update_attributes(@params[:role]) ...
is not intelligent enough to populate role.permissions and update the tables
in the database. That is fine, as long as I can access the select options
from the controller, but whatever name I put in params doesn't seem to work.
The hash returned by @params[:role] or @params["role"] doesn't include
"permissions" (i.e. @params[:role]["permissions"] is nil). Changing the name
to something else like id = "assocperms" name = "assocperms[]" doesn't help
as @params["assocperms"] also is nil (and so is @params["assocperms[]"],
etc.). Also removing the "[]" from the name didn't do the trick. Is my only
alternative to wrap up the select list in a div, send it via a
form_remote_tag, and parse it manually? The must be a more elegant solution.
If anyone can provide insight on how I can tackle this problem it will be
greatly appreciated!
Andres
"Julian Leviston" <julian / coretech.net.au> wrote in message
news:EE4E8D2C-7BDA-41E2-86E2-AC2C6042A33A / coretech.net.au...
> Hi.
>
> I wonder if there's a rails list...
>
> Can you be more specific?
>
> So you've got your helper code down to create HTML select, that's cool...
> but what do you mean by "use modifies the options via javascript" - how?
>
> Julian.
>
> On 08/08/2005, at 12:01 PM, Andres Montano wrote:
>
>> Does anybody know if the options for a select in a form are accesible
>> via
>> @params?
>>
>> I have an application that succesfully builds the select html statements
>> but
>> then the user modifies the options via javascript. When the form gets
>> posted, is there a way to know what options are there, which are
>> selected,
>> etc from the controller?
>>
>> I have tried all sorts of strategies like adding the [] to the name of
>> the
>> select tag, but however I name it, param always returns nil.
>>
>> Thanks,
>> Andres
>>
>>
>>
>>
>
>
>