2009-09-04 10 views
8

Digamos que hice esto:¿Cómo se llama un método desde la vista en los rieles?

script/generar el hogar controlador

Y en el controlador de casa hicieron un método ..

def say 
    puts "You are here" 
end 

¿cómo iba a llamar a ese método en el index.html .erb?

Al aprender ruby, solo dice ejecutar el archivo whatever.rb en el terminal para ejecutar el código que haya escrito dentro de ese archivo. Sólo curiosidad sobre cómo que funcionaría con rieles.

Respuesta

16

Supongo que tiene un servidor Rails en ejecución?

Theres dos posibilidades, en primer lugar se podría hacer decir un método de ayuda en el controlador mediante el uso de:

helper_method :say 

en su controlador.

Alternativamente, la mejor solución sería mover su método de decir al archivo home_helper (?). Rb helper.

puede llamarlo simplemente usando <% say%> en su archivo de vista.

Tenga en cuenta que puts pone bien lo que está en su cadena a STDOUT, no imprime en sus vistas, si todo lo que quiere hacer es escribir un poco de texto, sería mejor que simplemente entregue una cadena y use erb mecanismo de salida en su vista, por ejemplo

application_helper.rb

def say 
    "hello" 
end 

index.html.erb

<%= say -%> 

pone es muy útil para la depuración de prueba de unidad en la que quiere averiguar el contenido de un objeto

puts @some_object.inspect 

Mientras que si se desea una salida para el registro, podría hacer algo como:

logger.error "hello" 
+0

Por alguna razón no pude hacer que funcione al ponerlo en application_helper.rb y llamarlo al <%= say -%>. Sin embargo, lo hice funcionar cuando agregué "helper_method: say" en la parte superior del controlador y llamándolo con <%= say %> con el signo igual. Gracias por apuntarme en buena dirección. – Aaron

0

primero de todo lo que tiene que ejecutar la aplicación rieles

que hace que al ir a sus carriles directorio raíz aplicación de línea de comandos y se introduce

ruby script/server 

continuación, abra su navegador y escriba http://127.0.0.1:3000/home/say

Esto se debe apuntar a la casa del controlador, la acción decir

Edit: Como dijo el resto de la gente y se me olvidó Mencione que necesitará una vista (un archivo por convención ubicado bajo app/views/CONTROLLER_NAME/ACTION_NAME.html.erb en su ejemplo es app/views/home/say.html.erb) si no tiene dicho archivo su acción no se mostrará y usted recibirá un error.

3

En resumen: usted no hace eso.

Lo que hace es:
Llama a una acción en un controlador. Para cada acción, hay una vista correspondiente, p. "say.html.erb" en el directorio views/home.
para llamar a esa acción, y mostrar su correspondiente vista, se podría hacer algo como <%= link_to 'Say it', :controller => 'home', :action => 'say', :someadditionalparameter => 'foo' %> en su index.html.erb

Si desea acceder a :someadditionalparameter en la acción say, que haría lo mismo con params[:someadditionalparameter] y lo haría, en este caso, obtenga 'foo'.

1

Bueno, la vista por lo general no llama al controlador; va al revés, por lo que sé. La solicitud entra, Rails analiza la URL según tus rutas config/routes.rb y reenvía la solicitud a la acción apropiada en el controlador apropiado. De forma predeterminada, Rails proporciona una ruta para/nombre_de_controlador/nombre_de_acción, por lo que puede usar eso para jugar con lo que Rails hace por usted.

Después de que se haya ejecutado el controlador, Rails representa automáticamente la vista asociada, que por convención tiene el mismo nombre que su acción. La vista utilizada automáticamente para su acción 'decir' en el controlador 'home' se encontraría en la estructura de su directorio en app/views/home/say.html.erb. Puede anular esta representación de vista automática llamando al render en su acción de controlador, por ejemplo render :template => :index.

Y por último, como dijo Konstantinos, debe iniciar el servidor antes de que pueda navegar al sitio en un navegador web. Estará en http://127.0.0.1:3000/ de forma predeterminada; para llegar a la acción de decir del controlador del hogar, iría al http://127.0.0.1:3000/home/say.

Cuestiones relacionadas