459 votes

Comment dois-je appeler contrôleur/méthodes de vue à partir de la console dans les Rails?

Lorsque je charge script/console,, à certains moments, je veux jouer avec la sortie d'un contrôleur ou d'un helper de vue de la méthode.

Est-il possible de:

  • simuler une demande?
  • l'appel de méthodes à partir d'un contrôleur de l'instance sur la demande?
  • test des méthodes d'assistance, soit par l'intermédiaire de ladite instance de contrôleur ou d'une autre manière?

489voto

kch Points 25855

Pour appeler les aides, l'utilisation de l' helper ...hmm... helper.

$ ./script/console
>> helper.number_to_currency('123.45')
=> "R$ 123,45"

Si vous souhaitez utiliser une aide qui n'est pas inclus par défaut (par exemple, parce que vous avez supprimé helper :all de ApplicationController), il suffit d'inclure le helper.

>> include BogusHelper
>> helper.bogus
=> "bogus output"

Comme pour traiter avec les contrôleurs, je cite de Nick réponse:

> app.get '/posts/1'
> response = app.response
# you now have a rails response object much like the integration tests

> response.body            # get you the HTML
> response.cookies         # hash of the cookies

# etc, etc

153voto

Nick Points 3716

Un moyen facile d'appeler un contrôleur de l'action de script/console et affichage/manipuler l'objet de la réponse est:

> app.get '/posts/1'
> response = app.response
# you now have a rails response object much like the integration tests

> response.body            # get you the HTML
> response.cookies         # hash of the cookies

# etc, etc

L'application de l'objet est une instance de ActionController::Intégration::Session

Cela fonctionne pour moi, à l'aide de Rails 2.1 et 2.3, je n'ai pas essayé les versions antérieures.

116voto

Fernando Fabreti Points 705

Si vous avez besoin de tester à partir de la console (testé sur les Rails 3.1):

ApplicationController méthodes:

foo = ActionController::Base::ApplicationController.new
foo.some_method 

Route Des Assistants:

app.myresource_path
app.myresource_url

Aides De Vue:

foo = ActionView::Base.new
foo.javascript_include_tag 'myscript'
or
helper.link_to "foo", "bar"

ActiveSupport méthodes (testé sur les Rails 3.2):

require 'active_support/all'
1.week.ago
=> 2013-08-31 10:07:26 -0300
a = {'a'=>123}
a.symbolize_keys
=> {:a=>123}

Lib modules:

> require 'my_utils'
 => true 
> include MyUtils
 => Object 
> MyUtils.say "hi"
evaluate: hi
 => true 

77voto

Gordon Wilson Points 14721

Voici un moyen de le faire via la console:

>> foo = ActionView::Base.new
=> #<ActionView::Base:0x2aaab0ac2af8 @assigns_added=nil, @assigns={}, @helpers=#<ActionView::Base::ProxyModule:0x2aaab0ac2a58>, @controller=nil, @view_paths=[]>

>> foo.extend YourHelperModule
=> #<ActionView::Base:0x2aaab0ac2af8 @assigns_added=nil, @assigns={}, @helpers=#<ActionView::Base::ProxyModule:0x2aaab0ac2a58>, @controller=nil, @view_paths=[]>

>> foo.your_helper_method(args)
=> "<html>created by your helper</html>"

La création d'une nouvelle instance de l' ActionView::Base vous donne accès à la vue normale méthodes que votre assistant utilise probablement. Ensuite étendre YourHelperModule mélange ses méthodes dans votre objet vous permettant de visualiser leurs valeurs de retour.

14voto

Dan McNevin Points 15319

Une autre façon de le faire est d'utiliser les rails du débogueur. Il y a un Guide Rails sur le débogage à http://guides.rubyonrails.org/debugging_rails_applications.html

Fondamentalement, démarrer le serveur avec l'option-u:

./script/server -u

Et puis insérer un point d'arrêt dans votre script dans lequel vous souhaitez avoir accès aux contrôleurs/helpers/etc..

class EventsController < ApplicationController
  def index
    debugger
  end
end

Et quand vous faites une demande et a frappé la partie dans le code, la console du serveur sera de retour une invite d'où vous pouvez faire des demandes, à la vue des objets, etc.. à partir d'une invite de commande. Lorsque vous avez terminé, il suffit de taper 'cont' pour poursuivre l'exécution. Il existe également des options pour l'étendue de débogage, mais cela devrait au moins obtenir vous avez commencé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X