¿nombres dinámicos en variables de instancia?

Hola,

Tengo un form_tag con un número variable de text_areas:

<%@n_q.times do |n|%>
<%= text_area ‘mtask’ + n.to_s, ‘text’, :rows => 3, :cols => 60%>
<%end%>

y en el controlador querría hacer algo como:
@n_q.times{|n| @mtask???n=Mtask.new(params[‘mtask’ + n.to_s]) }
que fuera equivalente a hacer:
@mtask0=Mtask.new(params[‘mtask0’])
@mtask1=Mtask.new(params[‘mtask1’])
@mtask2=Mtask.new(params[‘mtask2’])
@mtask3=Mtask.new(params[‘mtask3’])
@mtask4=Mtask.new(params[‘mtask4’])

de modo que no pierda los valores al procesar los datos con algunos de
los submit_tag que utlizo. ¿Cómo podría hacerlo? Graciass.

On 5/8/07, Héctor [email protected] wrote:

que fuera equivalente a hacer:
@mtask0=Mtask.new(params[‘mtask0’])
@mtask1=Mtask.new(params[‘mtask1’])
@mtask2=Mtask.new(params[‘mtask2’])
@mtask3=Mtask.new(params[‘mtask3’])
@mtask4=Mtask.new(params[‘mtask4’])

de modo que no pierda los valores al procesar los datos con algunos de
los submit_tag que utlizo. ¿Cómo podría hacerlo? Graciass.

Es rebuscado, pero

@n_q.times { |n| instance_variable_set(“@mtask#{n}”.to_sym,
Mtask.new(params[“mtask#{n}”])) }

debería funcionar como pides.

De cualquier forma, a pesar de que eso funcione, es muy “raro”, yo
buscaría otra forma de hacerlo, quizá un array @mtasks o similar.

Gracias de nuevo Daniel! Funciona perfectamente. Al final voy a tener
que invitarte a algo :wink:

Supongo que se sería mejor con el array, pero no se cómo hacer que el
text_area coja el mtask[n], así que utilizo:
<%= text_area ‘mtask’ + n.to_s, ‘options’, :rows => 1, :cols => 60%>

mm creo que no, a no ser que sepas pq da el siguiente error :wink:

`@mtask[0]’ is not allowed as an instance variable name

Ya había probado con
<%= text_area “mtask[” + n.to_s + “]”, ‘options’, :rows => 1, :cols =>
60 %>
pero pasaba lo mismo (pq es lo mismo, ¿no? :). ¿Alguna idea de pq no va?

On 5/9/07, Héctor [email protected] wrote:

Gracias de nuevo Daniel! Funciona perfectamente. Al final voy a tener
que invitarte a algo :wink:

Supongo que se sería mejor con el array, pero no se cómo hacer que el
text_area coja el mtask[n], así que utilizo:
<%= text_area ‘mtask’ + n.to_s, ‘options’, :rows => 1, :cols => 60%>

Si me invitás a algo a mí también, te digo que:

<%= text_area “mtask[#{n}]”, ‘options’, :rows => 1, :cols => 60 %>

Luego desde tu controlador,

params[:mtask].each do |text|

aquí text tiene el contenido de cada text area.

end

Sirve?

Héctor wrote:

mm creo que no, a no ser que sepas pq da el siguiente error :wink:

`@mtask[0]’ is not allowed as an instance variable name

Prueba con los siguiente :

#En la vista :

<%= start_form_tag :action => ‘create’ %>
<%for result in ["","",""]%>
<%= text_area_tag “result[]”, ‘’, :rows => 3, :cols => 60%>
<%end%>
<%= submit_tag “Create” %>
<%= end_form_tag %>

En el controlador :

def create
c = “”
params[:result].each do |v|
c += v
end
render_text c
end

Saludos.

Jaime Mora R.

Ahora sí va perfectamente. Gracias a todos!