Mensaje de error al correr una formulario

Hola a todos

he creado el siguiente control y vista:
class GreetController < ApplicationController
def say_hi
@message= "Hello " + params[:textName]
end
end

--------------- la vista

Hello!!! <%= start_form_tag :controller=>'greet', :action=>'say_hi' %>

Enter Your N.: <%= text_field_tag :textName, :size=> 20 %>

<%= @message %>

<%= submit_tag( "Hello") %>

<%= end_form_tag %>

cuando la corros me sale un mensaje de error de:
can’t convert nil into string

si le quito el “+ params[:textName]” al controlador, funciona.
class GreetController < ApplicationController
def say_hi
@message= "Hello " end
end

parece que no recibe el valor que le entro en la text box.

Como arreglarlo

Hola,

Podrias verificar el contenido de params[:textName], por ejmplo :

if !params[:textName].nil?

@message= "Hello ".contact(params[:textName].to_s) --> convertir este
parametro a String

end

Busca la defincion de Class String de Ruby

Espero te ayude.

Mauricio

javier,

ha funcionado. gracias

ramirez wrote:

tal cual lo veo, est�s usando la misma acci�n (y la misma vista) para
presentar el formulario y para el mensaje de “hello”

cuando llames a la acci�n por primera vez (antes de presentar el
formulario) no vas a estar pasando ning�n valor en textName, por lo que
tendr�s un error

tienes varias soluciones si quieres mantener este esquema de una �nica
acci�n/vista. En el caso m�s parecido a otros lenguajes, podr�as poner
un if o usar el operador ?

 @message = params[:textName] ?  ("Hello " + params[:textName]) : ''

pero a m� me gustan m�s cualquiera de estas dos soluciones “m�s ruby”
@message = "Hello " + (params[:textName] || ‘’)

@message = "Hello " + params[:textName] rescue ''

La primera de ellas hace un or entre params[:textName] y ‘’. Al ser un
or, si la primera parte es cierta, devuelve esa parte, y si no lo es
(nil evalua a falso) te devuelve la segunda parte. En este caso @message
contendr�a la cadena “Hello”.

La segunda utiliza el manejo de excepciones. Si se produce una
excepci�n en la expresi�n, la cambia por el valor del rescue, en este caso
@message contendr�a una cadena vac�a.

Saludos,

j

tal cual lo veo, estás usando la misma acción (y la misma vista) para
presentar el formulario y para el mensaje de “hello”

cuando llames a la acción por primera vez (antes de presentar el
formulario) no vas a estar pasando ningún valor en textName, por lo que
tendrás un error

tienes varias soluciones si quieres mantener este esquema de una única
acción/vista. En el caso más parecido a otros lenguajes, podrías poner
un if o usar el operador ?

 @message = params[:textName] ?  ("Hello " + params[:textName]) : ''

pero a mí me gustan más cualquiera de estas dos soluciones “más ruby”
@message = "Hello " + (params[:textName] || ‘’)

@message = "Hello " + params[:textName] rescue ''

La primera de ellas hace un or entre params[:textName] y ‘’. Al ser un
or, si la primera parte es cierta, devuelve esa parte, y si no lo es
(nil evalua a falso) te devuelve la segunda parte. En este caso @message
contendría la cadena “Hello”.

La segunda utiliza el manejo de excepciones. Si se produce una
excepción en la expresión, la cambia por el valor del rescue, en este caso
@message contendría una cadena vacía.

Saludos,

j