Forum: Rails-ES multiples submit_tag

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
94ac01209314464490a94b47f051be0b?d=identicon&s=25 Aitor (Guest)
on 2007-06-29 12:13
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.
C1ddce6691ca0631671c243fa038cbbd?d=identicon&s=25 Moises Deniz (railsgeek)
on 2007-06-29 12:36
> 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
94ac01209314464490a94b47f051be0b?d=identicon&s=25 Aitor (Guest)
on 2007-06-29 12:39
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.
5c15703984caa012845b3cea129da936?d=identicon&s=25 Manuel González Noriega (Guest)
on 2007-06-29 13:01
(Received via mailing list)
On 29/06/07, Aitor <ruby-forum-incoming@andreas-s.net> 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 http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.
7fc5bb263a53cf8f3b847879e8b82570?d=identicon&s=25 Jose Francisco Gonzalez (Guest)
on 2007-06-29 14:02
(Received via mailing list)
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
C1ddce6691ca0631671c243fa038cbbd?d=identicon&s=25 Moises Deniz (railsgeek)
on 2007-06-29 14:51
> 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 :

http://api.rubyonrails.org/classes/ActiveRecord/As...
348246701cfdb2130b842fd839751a18?d=identicon&s=25 Raul Murciano (raul)
on 2007-07-02 07:08
(Received via mailing list)
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 ;)

1) http://simplelogica.net/logicola/index.php?q=comme...

2) Pulsar "preview" (aquí la primera previsualización es obligatoria)

3)
Voilà:<form action="/logicola/index.php?q=comment/reply/717" (...)>
   (...)
   <input type="submit" name="op" id="edit-preview" value="Preview
comment"  class="form-submit" />
   <input type="submit" name="op" id="edit-submit" value="Post comment"
  class="form-submit" />
</form>

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] http://www.w3.org/TR/REC-html40/interact/forms.htm...
"(...)A form may contain more than one submit button."
D3719a48527cd2240fb34c435070e74c?d=identicon&s=25 Jose Pedroza (admon)
on 2007-07-06 06:15
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
E91518f050cb6081186ff461950099e0?d=identicon&s=25 Luis Villegas (Guest)
on 2007-07-06 08:20
(Received via mailing list)
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
D3719a48527cd2240fb34c435070e74c?d=identicon&s=25 Jose Pedroza (admon)
on 2007-07-06 20:16
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 %>
<p><label for="programa">Programa</label><br/>
<%= text_field_tag "programa" %></p>
<%= submit_tag "buscar"%>
<a href="/matricula/buscar_por_programa.rhtml"><a/>
 <%-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
E91518f050cb6081186ff461950099e0?d=identicon&s=25 Luis Villegas (Guest)
on 2007-07-09 08:33
(Received via mailing list)
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.
D3719a48527cd2240fb34c435070e74c?d=identicon&s=25 Jose Pedroza (admon)
on 2007-07-09 21:01
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
E91518f050cb6081186ff461950099e0?d=identicon&s=25 Luis Villegas (Guest)
on 2007-07-10 08:44
(Received via mailing list)
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
E91518f050cb6081186ff461950099e0?d=identicon&s=25 Luis Villegas (Guest)
on 2007-07-10 08:45
(Received via mailing list)
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
D3719a48527cd2240fb34c435070e74c?d=identicon&s=25 Jose Pedroza (admon)
on 2007-07-10 19:15
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)
D3719a48527cd2240fb34c435070e74c?d=identicon&s=25 Jose Pedroza (admon)
on 2007-07-10 19:30
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
E91518f050cb6081186ff461950099e0?d=identicon&s=25 Luis Villegas (Guest)
on 2007-07-11 08:27
(Received via mailing list)
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.
This topic is locked and can not be replied to.