Isn't what you're trying to do AJAX?

J

On 08/08/2005, at 2:01 PM, Andres Montano wrote:

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