Selects y Ajax y lios

Hola,

Como descubriréis al leer el post, soy totalmente nuevo en Rails y en
programación web. Tengo conocimientos de C y Java, pero de Ruby poco y
de Rails mucho menos.

Mi idea es hacer un apartado de una web que va lanzando preguntas al
usuario. Primero debe aparecer la primera y, dependiendo de la
respuesta, elegir la siguiente pregunta.

En la vista, el codigo queda así:

<% q1 = {‘I’ll upload it’ => 1, ‘From flickr website’ => 2, ‘I don’t
want any image’ => 3}%>

#1 Where do gaudii obtain the main image of your design?

<%= select("answer", "id", q1, {:include_blank => false, :selected => 2})%>

<%= link_to_remote("Next question", :update => "question", :url => {:action => :question_2, :ans => :answer_id }) %>

El controlador es asi:

def question_2
render(:layout => false)
end

Y el codigo dentro del div id=“question” se sustituye por la siguiente
pregunta en question_2.html.erb :

<% q2 = {‘I don’t mind’ => 1, ‘From the image’ => 2, ‘I like to
randomize!’ => 3}%>

#2 Where do gaudii obtain the main colors?

<%= select("answer", "id", q2, {:include_blank => false, :selected => 1})%>
<% puts params[:ans] %>

<%= link_to_remote("Next question", :update => "question", :url => {:action => :question_3 }) %>

Lo que me gustaría saber es, ¿como obtengo el valor que se ha
seleccionado en el select helper? Y la mñas importante, ¿como veis esa
solución? Personalmente la veo algo chapucera, pues debo crear un codigo
html.erb por cada pregunta y estoy seguro de que podría (o debería)
hacerse con un solo código que eligiera la más adecuada, ¿no?

No utilizo absolutamente nada de baso de datos en esta aplicación web
(al menos por ahora).

Gracias y lo siento si las dudas son tontas :confused:

Victor M. wrote:

Hola,

Como descubriréis al leer el post, soy totalmente nuevo en Rails y en
programación web. Tengo conocimientos de C y Java, pero de Ruby poco y
de Rails mucho menos.

Mi idea es hacer un apartado de una web que va lanzando preguntas al
usuario. Primero debe aparecer la primera y, dependiendo de la
respuesta, elegir la siguiente pregunta.

En la vista, el codigo queda así:

<% q1 = {‘I’ll upload it’ => 1, ‘From flickr website’ => 2, ‘I don’t
want any image’ => 3}%>

#1 Where do gaudii obtain the main image of your design?

<%= select("answer", "id", q1, {:include_blank => false, :selected => 2})%>

<%= link_to_remote("Next question", :update => "question", :url => {:action => :question_2, :ans => :answer_id }) %>

El controlador es asi:

def question_2
render(:layout => false)
end

Y el codigo dentro del div id=“question” se sustituye por la siguiente
pregunta en question_2.html.erb :

<% q2 = {‘I don’t mind’ => 1, ‘From the image’ => 2, ‘I like to
randomize!’ => 3}%>

#2 Where do gaudii obtain the main colors?

<%= select("answer", "id", q2, {:include_blank => false, :selected => 1})%>
<% puts params[:ans] %>

<%= link_to_remote("Next question", :update => "question", :url => {:action => :question_3 }) %>

Lo que me gustaría saber es, ¿como obtengo el valor que se ha
seleccionado en el select helper? Y la mñas importante, ¿como veis esa
solución? Personalmente la veo algo chapucera, pues debo crear un codigo
html.erb por cada pregunta y estoy seguro de que podría (o debería)
hacerse con un solo código que eligiera la más adecuada, ¿no?

No utilizo absolutamente nada de baso de datos en esta aplicación web
(al menos por ahora).

Gracias y lo siento si las dudas son tontas :confused:

Es que tu lio no viene de rails, tu lio viene de xhtml y js en general.
un link_to, si ves el codigo fuente de la pagina cuando se muestra, no
es mas que un conjunto de instrucciones de js, y con el link_to no estas
pasando el valor del select.
Te recomiendo que hagas un form y cambies el link_to por un remote form.
Como regla general, primero hace el sitio que funcione sin js, una vez
que este asi, agregale todos los efectos locos que quieras con js, pero
asegurate que ande sin js también :smiley:
Y si, tener una accion por pregunta es algo engorroso, pero digamos que
no tener todas esas preguntas y repuestas en alguna fuente de datos
también.
Primero fijate de llenar preguntas y respuestas en algun repositorio de
datos, ya fuese una base de datos, un archivo xml, lo que fuese.
Despues programate la accion que muestre la primer pregunta, cuando el
usuario responda la primer pregunta, mostras la segunda, y asi hasta la
ultima, guardando las respuestas en algun lado (base de datos, sesion,
archivo, etc.)

Me olvidaba, el valor de las respuestas lo obtenes dentro del hash
params, pero eso si cambias tu pagina porque actualmente no estas
mandando el valor de las respuestas

Rodrigo D. wrote:
Es que tu lio no viene de rails, tu lio viene de xhtml y js en general.
un link_to, si ves el codigo fuente de la pagina cuando se muestra, no
es mas que un conjunto de instrucciones de js, y con el link_to no estas
pasando el valor del select.
Te recomiendo que hagas un form y cambies el link_to por un remote form.
Como regla general, primero hace el sitio que funcione sin js, una vez
que este asi, agregale todos los efectos locos que quieras con js, pero
asegurate que ande sin js también :smiley:
Y si, tener una accion por pregunta es algo engorroso, pero digamos que
no tener todas esas preguntas y repuestas en alguna fuente de datos
también.
Primero fijate de llenar preguntas y respuestas en algun repositorio de
datos, ya fuese una base de datos, un archivo xml, lo que fuese.
Despues programate la accion que muestre la primer pregunta, cuando el
usuario responda la primer pregunta, mostras la segunda, y asi hasta la
ultima, guardando las respuestas en algun lado (base de datos, sesion,
archivo, etc.)

Me olvidaba, el valor de las respuestas lo obtenes dentro del hash
params, pero eso si cambias tu pagina porque actualmente no estas
mandando el valor de las respuestas

Hola Rodrigo!

Toda la razón del mundo, me he metido en terrenos pantanosos de js sin
saber primero la base siquiera del html (en serio).

Ahora tengo todas las preguntas (todas con select_tag) en un unico form
y sin nada de js; supongo que al final tendre que poner un submit para
que envie las respuestas, pero quiero que estas le lleguen a una acción
que compruebe si son correctas o no. ¿Es posible esto?

Un saludo y gracias!

Victor M. wrote:

Hola Rodrigo!

Toda la razón del mundo, me he metido en terrenos pantanosos de js sin
saber primero la base siquiera del html (en serio).

Ahora tengo todas las preguntas (todas con select_tag) en un unico form
y sin nada de js; supongo que al final tendre que poner un submit para
que envie las respuestas, pero quiero que estas le lleguen a una acción
que compruebe si son correctas o no. ¿Es posible esto?

Un saludo y gracias!

Respondiéndome a mi mismo (en parte): con un submit_tag he obtenido las
respuestas del form (aparece en la ventana del terminal donde tengo
lanzado el servidor), ahora la cosa es: ¿como le paso esos valores a la
acción del controlador?

Rodrigo D. wrote:

martin, no lo tomes a mal pero esas son cosas basicas, te recomiendo que
te leas agile web development with rails, te va a facilitar mucho la
vida
todo lo que submiteas, en la accion del controlador apareche bajo el
hash params
saludos :wink:

Por supuesto que no me lo tomo a mal, es evidente mi desconocimiento :stuck_out_tongue:
sobre el form, ya conseguí hacerlo esta mañana. En realidad era muy
sencillo, pero era la primera vez que hacía algo así y no entendía nada.

Sobre el libro, ya lo tengo y he leido varios capítulos, pero mi
aplicación es muy distinta a la que se detalla de ejemplo en el libro.
Gracias de todas formas :wink:

Victor M. wrote:

Victor M. wrote:

Hola Rodrigo!

Toda la razón del mundo, me he metido en terrenos pantanosos de js sin
saber primero la base siquiera del html (en serio).

Ahora tengo todas las preguntas (todas con select_tag) en un unico form
y sin nada de js; supongo que al final tendre que poner un submit para
que envie las respuestas, pero quiero que estas le lleguen a una acción
que compruebe si son correctas o no. ¿Es posible esto?

Un saludo y gracias!

Respondiéndome a mi mismo (en parte): con un submit_tag he obtenido las
respuestas del form (aparece en la ventana del terminal donde tengo
lanzado el servidor), ahora la cosa es: ¿como le paso esos valores a la
acción del controlador?
martin, no lo tomes a mal pero esas son cosas basicas, te recomiendo que
te leas agile web development with rails, te va a facilitar mucho la
vida
todo lo que submiteas, en la accion del controlador apareche bajo el
hash params
saludos :wink: