Multiples submit_tag

en un form_remote_tag con dos posibles opciones, por que siempre sale la
primera opcion pulsada?

<%= form_remote_tag( :url => { :action => “mailing” } ) -%>

<%= text_field :mailing, :email -%>
<%= submit_tag “Alta”, :name => “submit” -%>
<%= submit_tag “Baja”, :name => “submit” -%>

case params[:submit]
when “Alta”
@pulsado = “Alta”

when "Baja"
   @pulsado = "Baja"

end

log

Parameters: {“mailing”=>{“email”=>“xcxcxcxc@em”}, “submit”=>“Alta”,
“action”=>“mailing”, “controller”=>“v1”}

Parameters: {“mailing”=>{“email”=>“xcxcxcxc@em”}, “submit”=>“Alta”,
“action”=>“mailing”, “controller”=>“v1”}

si seguro que es una tonteria, pero me esta quitando el sueño

Un saludo.
Gracias.

en un form_remote_tag con dos posibles opciones, por que siempre sale la
primera opcion pulsada?

<%= form_remote_tag( :url => { :action => “mailing” } ) -%>

<%= text_field :mailing, :email -%>
<%= submit_tag “Alta”, :name => “submit” -%>
<%= submit_tag “Baja”, :name => “submit” -%>

case params[:submit]
when “Alta”
@pulsado = “Alta”

when "Baja"
   @pulsado = "Baja"

end

log

Parameters: {“mailing”=>{“email”=>“xcxcxcxc@em”}, “submit”=>“Alta”,
“action”=>“mailing”, “controller”=>“v1”}

Parameters: {“mailing”=>{“email”=>“xcxcxcxc@em”}, “submit”=>“Alta”,
“action”=>“mailing”, “controller”=>“v1”}

El problema es que al serializar el formulario coge el primer submit que
le aparece…, de todos modos si lo que quieres es que realmente se
hagan dos cosas diferentes según el boton deberías tener dos acciones
separadas en el controlador y sustituir los submits por botones que
lanzan el formulario con javascript a la acción a la que quieres ir…

Ten en cuenta que tu código genera algo parecido a esto en el
form_remote_tag

new Ajax.Request(’/nombre_controlador/mailing’, {asynchronous:true,
evalScripts:true, parameters:Form.serialize(this)}); return false;

Una posible opción es que el javascript de cada botón lo generes con
remote_function (acepta las opciones de form_remote_tag) y los
parámetros adecuados para ir a cada acción.

Sustituyendo el form_remote_tag por un form_tag podría quedar algo así:

<% form_tag do -%>
<%= text_field :mailing, :email -%>
<%= button_to_function(“Alta”, remote_function(:url => {:action =>
“alta_mailing”}))-%>
<%= button_to_function(“Baja”, remote_function(:url => {:action =>
“baja_mailing”}))-%>
<% end -%>

Tan solo te restaría crear las acciones alta_mailing y baja_mailing…

Espero que te sirva.
Salu2

Gracias Moises por la explicacion, al final encontre lo siguiente para
realizar dos acciones en un form_remote_tag

<%= hidden_field_tag ‘process’, ‘Alta’ %>
<%= submit_tag ‘Alta’, :name => ‘_process’, :onclick =>
“Form.getInputs(this.form, null, ‘process’)[0].value = ‘Alta’” -%>
<%= submit_tag ‘Baja’, :name => ‘_process’, :onclick =>
“Form.getInputs(this.form, null, ‘process’)[0].value = ‘Baja’” -%>

Un saludo.

On 29/06/07, Aitor [email protected] wrote:

en un form_remote_tag con dos posibles opciones, por que siempre sale la
primera opcion pulsada?

<%= form_remote_tag( :url => { :action => “mailing” } ) -%>

<%= text_field :mailing, :email -%>
<%= submit_tag “Alta”, :name => “submit” -%>
<%= submit_tag “Baja”, :name => “submit” -%>

A estas alturas estoy ya plenamente convencido de que soy la única
persona del mundo que jamás ha necesitado hacer un formulario con dos
botones submit, pero ese formulario debería tener simplemente un

  • un textfield de email
  • select con un label ‘Deseo darme de:’ y dos opciones ‘alta’, ‘baja’
  • un submit ‘enviar’

Cada botón de submit es como la ventanilla en la que entregas un
formulario en papel. Nunca debería haber necesidad de más de una
ventanilla. Ventanilla única, y que se organicen los funcionarios para
saber que hacer con él.


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o simplelogica.net
Recuerda comer mucha fruta y verdura.

Acabo de empezar con Rails, y en este foro tambien, y a la primera ya
tengo una duda que explico.

Tengo dos tablas, una de users con id, name, address, etc. y otra para
guardar fotos de cada usuario llamada photos con id, user_id y photo.

En el modelo de user he puesto has_many :photos y en de photo
belongs_to :user. En el listado de users he añadido un enlace que
presenta el formulario para gestionar las fotos de ese usuario.

tengo dos dudas, la primera, ¿como hago para que en el formulario de
photos solo salgan las que corresponden al usuario? y la segunda, al
añadir una foto en la tabla photos ¿como lleno el campo user_id ya que
no puede quedar a NULL?

Gracias y saludos

En el modelo de user he puesto has_many :photos y en de photo
belongs_to :user. En el listado de users he a�adido un enlace que
presenta el formulario para gestionar las fotos de ese usuario.

tengo dos dudas, la primera, �como hago para que en el formulario de
photos solo salgan las que corresponden al usuario?

Para ver las fotos de un usuario lo lógico es pasarle a la acción el id
del usuario en cuestión y así en el find de Photo pasarselo como
:conditions => “user_id = #{id_usuario}”

y la segunda, al a�adir una foto en la tabla photos �como lleno el campo user_id > ya que no puede quedar a NULL?

Para asignar un modelo a otro tienes que hacer algo así:

@objeto_photo = Photo.create(params[:photo]) # o el objeto si ya lo
habías creado antes
@user = User.find(id_usuario)
@user.photos << @objeto_photo
@user.save

De todos modos creo que deberías leerte un poco como funcionan las
relaciones entre modelos…, el libro de Agile Development with Rails
está muy bien. Si no lo tienes y quieres echar un vistazo rápido a la
documentación online usa esta url :

Hola Primero que todo:
soy nuevo en el foro pero me inscribi por que estoy que tiro la toalla
con rails
Los primeros pasos de cualquier tutorial hacen que uno sienta que es
facil
hacer cualquier cosa que uno quiera, pero cuando se empieza a hacer
preguntas
la cosa se complica.
por ejemplo estoy realizando una consulta a la base de datos con base en
un
parametro de una tabla matricula (llamado programa)
en el matricula_controller tengo lo siguiente:
class MatriculaController < ApplicationController
before_filter :login_required
scaffold:matricula
def buscar_por_programa(programa)
@matriculas=Matricula.find(:all,
:conditions=>[“programa=?”,programa])
end
end
se supone (segun yo) que en el def buscar_por_programa(programa)estoy
creando el
metodo para buscar con base en el parametro
El problema es que cuando hago una vista con un tetxtfield y un boton
que tome este parametro y llame a otra vista para mostrar los datos no
sale
nada.
me podrian ¡POR FAVOR! guiar en esto. ya he probado con submit, con los
<%= form_remote_tag he leido y releido en ingles y en español y no he
podido
dar con la respuesta. Por favor,
gracias
Jose

Hola Manuel,

Manuel González Noriega
escribió:> A estas alturas estoy ya plenamente convencido de que soy la única

persona del mundo que jamás ha necesitado hacer un formulario con dos
botones submit(…)

Yo creo que es algo habitual en algunos escenarios, como a la hora de
previsualizar o publicar un comentario. Tomemos como ejemplo un blog que
utiliza Drupal :wink:

  1. simplelogica.net

  2. Pulsar “preview” (aquí la primera previsualización es obligatoria)

Voilà:<form action=“/logicola/index.php?q=comment/reply/717” (…)>
(…)

Drupal no me parece precisamente un paradigma de la usabilidad, pero
creo que aquí han escogido la opción más agradable para el usuario.

Cada botón de submit es como la ventanilla en la que entregas un
formulario en papel. Nunca debería haber necesidad de más de una
ventanilla. Ventanilla única, y que se organicen los funcionarios para
saber que hacer con él.

En este caso la “ventanilla única” que propones (desplegable o
radiobutton para indicar la acción deseada + submit) obliga al usuario
que no desea efectuar la acción por defecto a hacer un click adicional,
¿no te parece un pelín más incómoda en este caso? ¿Qué ventajas aporta?

Cuando afirmas que “nunca deberíamos necesitar más de una ventanilla”
¿crees que deberían modificarse los estándares[1] para impedir que
aparezcan varios submit en un mismo formulario?

(Perdonad el OT pero cuando leo “nunca” o “siempre” no puedo evitar
hacer de abogado del diablo).

Saludos,
Raúl Murciano

[1] Forms in HTML documents
“(…)A form may contain more than one submit button.”

Gracias por el tip, ya lo aplique y creo que parte del problema estaba
en ese codigo. Sin embargo aun tengo problemas con esa consulta, pero
ahora creo que es por la vista
por lo menos ahora en el explorador sale algo pero es un error:wrong
number of arguments (0 for 1)
Quiere decir que la vista que estoy utilizando no esta pasando el
parametro para hacer la busqueda.
La vista (que por cierto la he cambido como mil veces) que estoy
utilizando es la siguiente:

<% form_tag ({:action => ‘buscar_por_programa’}, {:class=>‘matricula’})
do %>

Programa
<%= text_field_tag "programa" %>

<%= submit_tag "buscar"%> <%-end %>

Esta es la ultima que he utilizado y que por lo menos aparece el error
por que antes no aparecia nada
Agradeceria que me pudieran guiar, o decirme en que estoy cometiendo el
error
Gracias
Jose

No tires la toalla hombre, que rails es muy práctico.

Prueba así
def buscar_por_programa
@matriculas=Matricula.find(:all,:conditions=>[“programa=?”
,params[:nombre_del_campo_de_texto]])
end

Buenas. Tendrías que decir qué pretendes hacer con el a href ese. No sé
lo
que quieres hacer pero lo que es seguro es que no se hace así.

Y el error ese de wrong number of arguments (0 for 1), da porque has
llamado
a un método que necesita un argumento y no le estás pasando ninguno.
Supong
que está en el controlador el error. Si te fijas en la página de error,
en
algún sitio te tendrá que salir el nombre del fichero de error y el
número
de línea. Pega aquí el log del error si no lo ves y el método del
controlador al que llamas.

También fíjate en el log en ./log/development.log

Un saludo.

que mas luis:
gracias por responder.
el error que me aparece en el explorador (completo)
ArgumentError in MatriculaController#buscar_por_programa
wrong number of arguments (0 for 1)
RAILS_ROOT: ./script/…/config/…
Request
Parameters: {“programa”=>“sistemas”, “commit”=>“buscar”}
Show session dump

:user: 1
:return_to:
flash: !map:ActionController::Flash::FlashHash {}
Response
Headers: {“cookie”=>[], “Cache-Control”=>“no-cache”}
mi controller es
class MatriculaController < ApplicationController
before_filter :login_required
scaffold:matricula
def buscar_por_programa(programa)
@matriculas=Matricula.find(:all,:conditions=>[“programa=?”,params[:programa]])
end
y el view es el que ya he puesto en mi mensaje anterior
lo que quiero es listar un grupo de matriculas pero filtrado por el
parametro programa es decir por ejemplo cuando quiera ver los inscritos
del programa sistemas me aparescan solo estos. el href que esta en la
vista es un intento desesperado por que me mandase hacia otra vista que
tengo destinada para que liste los resultados de la busqueda.
Gracias de antemano por la ayuda que me puedas brindar
Jose

El error te da porque has definido tu método así:

def buscar_por_programa(programa)
@matriculas=Matricula.find(:all,:conditions=>[“programa=?”,programa])
end

cuando deberías definirlo así:

def buscar_por_programa(programa)
@matriculas=Matricula.find
(:all,:conditions=>[“programa=?”,params[:programa]])
end

La explicación es que tú has definido tu método para que reciba un
parámetro
y ese parámetro sea obligatorio. Eso se ve en la traza de error:
ArgumentError
in MatriculaController#buscar_por_programa wrong number of arguments (0
for
1). Te dice que en el método buscar_por_programa del controlador
MatriculaController, estás enviando 0 argumentos cuando deberías mandar
1.

Como curiosidad, si realmente quisieras que el método recibiese un
parámetro
y éste no fuese obligatorio, podrías definir el método así:
buscar_por_programa(programa=nil). Así en caso de que no le mandases el
parámetro, el método tendría programa inicializado al valor nil, o al
valor
que le quieras dar por defecto.

Y para terminar, recomendarte que en las vistas, los text_fields los
hagas
más descriptivos. Así: <%=text_field :matricula, :prorgama%>. Supongo
que
será la forma más correcta porque en todas partes lo ponen así, aunque
en
eso te podrán asesorar mejor los realmente expertos de esta lista, que
hay
muchos más que este humilde servidor.

A ver si te ha servido. Un saludo

Perdón, me he equivocado en la definición del método (cosas del
copypaste).
Realmente tendría que ser así:

def buscar_por_programa
@matriculas=Matricula.find
(:all,:conditions=>[“programa=?”,params[:programa]])
end

Muchas gracias por todos los aportes que me ha brindado, ha sido de gran
ayuda tener a alguien que por lo menos tenga mas experiencia en esto que
yo.
Perdoneme por la ignorancia pero en realidad soy nuevo en esto y como le
digo, cualquier aporte es de gran ayuda para mi.
De nuevo muchas gracias y espero en un futuro poder devolverle el favor
(claro cuando ya pueda decir que estoy manejando mejor los conceptos de
ruby on rails)

Luis, viejo
gracias, acabo de probar lo que usted me dijo y salio de una. Es que el
que sabe sabe de verdad hermano.
Gracias viejo, y perdone por molestarlo tanto.
Solo necesitaba el arranque, espero que de ahora en adelante no tenga
que molestarlo mas.
Gracias
Jose

Un placer hombre. No es ninguna molestia. No sabes la guerra que he dado
yo
a esta lista (y que sigo dando), así que si puedo ayudar, encantado.