Ruby on Rails: Comment faire pour imprimer une chaîne et d'où vient-il afficher?
Je sais que c'est une question banale. Mais je recherche tout sur google mais impossible de trouver une réponse simple à cette question.
Fondamentalement, j'ai une ligne qui dit <%= link_to 'Run it', :method => 'doIt' %>
dans la vue, puis dans le contrôleur correspondant, j'ai l' doIt
méthode comme suit:
def doIt
puts "Just do it"
end
Je veux juste vérifier que si je clique sur Run, elle sera sortie de la chaîne "Just do it". J'ai couru ce sur localhost et il n'y a pas d'erreurs, mais je ne trouve pas la sortie de "Just do it" n'importe où. Il n'est pas affiché dans la console rails ou des rails de log du serveur. Je veux juste savoir d'où ne met la chaîne en sortie , où le trouver ?
Ronde 2: c'est Donc ce que j'ai essayé ....
A ajouté cette ligne dans l'index.html.erb (qui est à la racine)
<%= link_to 'Run it', :method => 'do_it' %>
et dans l'url, c'est juste fondamentalement http://localhost:3000/ (depuis que je parcours le contrôleur n ° d'index en tant que root)
L'écran est juste un a souligné "Exécuter" que des liens vers les 'do_it' méthode dans le contrôleur.
Dans le contrôleur, j'ai inclure cette méthode
def do_it
logger.debug "Just do it"
end
quand je clique sur "Exécuter", le changement d'url pour http://localhost:3000/gollum_starters?method=do_it et dans le développement.journal, la suite est écrit:
Started GET "/gollum_starters?method=do_it" for 127.0.0.1 at 2011-08-25 15:27:49 -0700
Processing by GollumStartersController#index as HTML
Parameters: {"method"=>"do_it"}
[1m[35mGollumStarter Load (0.3ms)[0m SELECT "gollum_starters".* FROM "gollum_starters"
Rendered gollum_starters/index.html.erb within layouts/application (3.6ms)
Completed 200 OK in 16ms (Views: 7.7ms | ActiveRecord: 0.3ms)
En outre, j'ai essayé tout à l'enregistreur de données.erreur/info/fatal/etc ... et les Rails.enregistreur.erreur/info/fatal/etc, tous ne s'imprime pas sur la ligne "Just do it" dans le log de développement
@Paul: je n'ai pas toucher à l'environnement de dossier ou de fichier, je suppose par défaut lorsqu'une nouvelle application rails est créé, il est en cours de développement ?
@Maz: Oui, vous avez raison, je suis juste en train de tester si le do_it méthode est appelé. Pour ce faire, je veux juste afficher quelque chose dans le contrôleur. Ne peut pas penser de toute manière plus simple qu'il suffit d'imprimer une chaîne de caractères, mais ce problème me rend malheureux. Je suis juste en utilisant textmate, aucune IDE.
Ronde 3:
@Paul, merci beaucoup, mais j'ai rencontré d'erreur
Mes itinéraires des fichiers est maintenant:
resources :gollum_starters
root :to => "gollum_starters#index"
match 'gollum_starters/do_it' => 'gollum_starters#do_it', :as => 'do_it'
Mon index.html.erb est maintenant:
<%= link_to "Do it", do_it_path %>
Mon gollum_starters_controller.rb
def do_it
logger.debug 'Just do it'
end
J'obtiens cette erreur:
Ne pouvais pas trouver GollumStarter avec ID=do_it
l'erreur est ici, 2e ligne:
def show
@gollum_starter = GollumStarter.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @gollum_starter }
end
end
Je me demande pourquoi il route de montrer ? Lorsque je clique sur do_it, il va en fait à localhost:3000/gollum_starters/do_it ce qui est correct, mais apparemment l'erreur de points à la méthode show ?
Ronde 4:
@Paul, je l'ai déplacé ressources :gollum_starters bas:
root :to => "gollum_starters#index"
match 'gollum_starters/do_it' => 'gollum_starters#do_it', :as => 'do_it'
resources :gollum_starters
mais eu cette erreur (omg j'ai envie de me tuer),
Modèle est manquant
Manquant modèle gollum_starters/do_it avec {:handlers=>[:erb, :rjs,
:builder :rhtml, :rxml], :formats=> [html], :locale=>[:fr, :fr]} dans
chemins de vue "~/project_name/app/views"
:/
---------- Réponse à la Ronde 4 ------------
Fondamentalement que l'erreur explique, il n'y a pas de modèle(j'.e une page web) pour montrer d'où erreur renvoyé. La solution est d'ajouter un redirect_to , dans ce cas, je rediriger vers root_url.
def do_it
logger.debug 'Just do it'
redirect_to(root_url)
end
Tout fonctionne maintenant, "Just do it" enfin sorties de développement.et le journal d'rails console du serveur.
Merci Maz et Paul et André pour m'aider. Apprendre beaucoup de choses.
Yup le regarder, merci pour l'explication détaillée
OriginalL'auteur John Lee | 2011-08-25
Vous devez vous connecter pour publier un commentaire.
Que
link_to
ne fait pas ce que vous pensez qu'il n'a de la valeur pour:method
est en se référant à laHTTP
verbes.Prises à partir de la documentation pour ActionView::Assistants::UrlHelper
Vous devez définir un itinéraire dans votre
routes.rb
fichier qui utilise votre méthodecontroller/do_it
est de la route pour être assorti decontroller#do_it
est le contrôleur suivie par l'action à être utilisé (séparés par des#
):as
crée le chemindo_it_path
qui peuvent être utilisés dans votrelink_to
Votre
link_to
peut ressembler à quelque chose commeEt pour terminer le cycle de vie d'une demande, vous devez ajouter un
view
être renduRésumé
Tout cela crée un peu de désordre juste pour afficher quelque chose dans les journaux, mais il devrait vous aider à comprendre l'ensemble du cycle de vie un peu mieux maintenant. En Plus c'réponses sert un document pour vous aider à rembobiner ce gâchis.
Voir mise à jour de réponse
Désolé de vous déranger. Avez-vous une autre manquant modèle d'erreur, voir le Tour 4.
Ok je me rends compte du problème, il n'y a pas de modèle pour montrer, j'ai donc dû manuellement redirect_to quelque chose, et je me rediriger vers la racine
OriginalL'auteur Paul.s
Vous n'êtes pas la compréhension de ce que la "méthode" dans le contexte d'un lien.
La "méthode" se réfère ici à la la méthode de requête, ce qui signifie que le type de demande que vous demandez au navigateur de faire. Du point de vue d'un Reposant application comme des Rails, il y a quatre pertinentes types de demande: GET, POST, PUT et DELETE. Ces types de demande affecter la façon dont le contrôleur répond à une demande.
Il y a deux autres "standard" rails actions, de création et de modification. Ce sont des demandes pour présenter une interface à l'utilisateur. NOUVELLES vous donne un formulaire à POSTER (CRÉER) un nouvel objet, et de MODIFIER vous donne un formulaire à METTRE (mise à JOUR) et de l'existant.
Voir le guide rails pour en savoir plus sur comment HTTP Verbes se rapportent à des opérations CRUD.
L'important, la première chose à comprendre est que les liens sont, par défaut, les requêtes GET, et les formes sont, par défaut, les requêtes POST.
Ainsi, lorsque votre lien ressemble à ceci:
...c'est faux. Il n'y a pas une telle méthode HTTP "do_it", de sorte que vous n'êtes pas déclencher quoi que ce soit. Car il n'y a pas une telle méthode, les Rails en fait l'envoie en paramètre de l'URL. Par conséquent, si vous cliquez sur ce que vous devriez voir votre barre d'url, maintenant, dit
?method=do_it
à la fin.Il y a plusieurs problèmes avec ce que vous essayez de faire. Tout d'abord, le link_to helper s'attend au moins à deux arguments: 1, le texte pour le lien, et 2 le HREF du lien. Donc, vous avez vraiment besoin d'utiliser:
Deuxièmement, vous avez besoin de savoir quelle URL passer pour obtenir votre contrôleur de l'action.
S'il vous plaît être familiarisé avec les éléments suivants convention rails: Lorsque l'on se réfère à l'action d'un contrôleur, vous pouvez abréger l'aide de la forme:
controller_name#controller_action
. par exemple,pages#show
ouarticles#index
.En supposant que votre contrôleur est appelé
ExamplesController
, vous pouvez déclencher manuellement les sept actions de contrôleur comme suit:Remarque que ci-dessus, d'INDEX, de MONTRER, de NOUVEAU, et de MODIFIER sont toutes les requêtes GET. Vous pouvez spécifier
:method => :get
mais c'est inutileÀ l'abrégé de cette distance et de prendre en charge l'attribution d'IDENTIFIANT lors de la nécessaire Rails fournit chemin aides.
Donc, répéter l'aide du chemin d'accès aides, vous pouvez utiliser:
Maintenant, vous obtenez ces chemin aides à partir du routeur, et qu'ils sont définis dans votre
routes.rb
fichier. Au sein de ce fichier si vous définir:...alors vous obtiendrez tous les path_helpers ci-dessus.
Si vous utilisez un normal Reposant contrôleur et vous souhaitez ajouter une action personnalisée, vous avez besoin pour rendre une décision: l'action de fonctionner sur l'ensemble des objets gérés par le contrôleur (comme index) ou juste un seul spécifique (comme le montrent). La raison de ce qui est important, c'est ceci indique au routeur si la nouvelle action, vous êtes à la définition des besoins à recevoir un ID d'enregistrement en tant que partie de la demande.
Si vous voulez agir sur l'ensemble de la collection d'objets, de vous définir:
Si vous voulez agir sur un seul membre de la collection vous définir:
Où j'ai écrit " get " dans les exemples ci-dessus, vous pouvez utiliser l'une des quatre verbes -- est normalement ce que vous faites si vous souhaitez afficher une page, et le POSTE est normalement ce que j'utiliserais si vous êtes à la soumission d'un formulaire. Vous pouvez également écrire cette forme abrégée comme suit:
Pour en savoir plus sur définissant des actions de contrôleur, voir le guide rails.
Maintenant que vous avez défini une route, vous devez exécuter
rake routes
dans le terminal pour voir le nom de la nouvelle voie de l'aide. Supposons que vous avez ajoutédo_it
comme une méthode de collecte, de votre chemin helper serait:do_it_examples_path
.Maintenant, puis, de retour à votre lien, si vous mettez:
... alors vous déclencherait la
do_it
action. Lorsque l'action est déclenchée votreputs
devrait normalement rendre dans les logs du serveur (en supposant que vous êtes en cours d'exécution rails s dans une fenêtre de terminal, vous devriez le voir juste aprèsstarted GET on examples#do_it
...).Maintenant, dans le navigateur, vous obtiendrez un manque de modèle de l'erreur comme une requête GET va attendre pour rendre un avis, mais c'est un sujet pour une autre question. En gros, maintenant, vous devez comprendre ce que les actions du contrôleur sont, comment vous rendre à eux. Si vous voulez en savoir plus à propos de quoi faire avec votre contrôleur de l'action, voir le guide 🙂
J'espère que vous comprenez ce qui se passe maintenant. N'hésitez pas à poser des questions.
OriginalL'auteur Andrew
Vous souhaitez utiliser les Rails mécanisme de journalisation:
http://guides.rubyonrails.org/debugging_rails_applications.html#sending-messages
Cela signifie que même si vous n'avez pas de lancer le serveur à l'aide de
rails s
la sortie sera toujours à la bonne place.non, met envoie la sortie vers STDOUT, la plupart du temps STDOUT est de la borne, mais parfois il ne l'est pas. Dans ce cas, il ne l'est pas. met encore en travaux, il n'a tout simplement pas de sortie de contenu où vous voulez qu'elle est émise. Le texte qui défile par la console est également écrit dans le log de développement. C'est dans ce journal, de ne pas le terminal, qui vous voulez écrire.
Merci pour l'explication. J'ai essayé toutes de cet enregistreur.(debug|info|alerter||erreur fatale) et de vérifier le développement de journal pour elle, mais elle ne peut toujours pas écrire dans le journal. J'ai même fait un ctrl-shift-f sur mon dossier de projet et ne le trouve pas connecté n'importe où, sauf dans le contrôleur où je n'ai enregistreur.debug "Just do it". Donc, fondamentalement, je clique sur "Exécuter", et la méthode do_it (modifié à partir de doIt de suivre les rails de la convention) est appelée, et je n'ai enregistreur.debug/info/etc ... mais j'ai vérifier le log de développement et de "Just do it" n'est pas écrit.
Quelqu'un peut-il m'aider ? Ce qui est frustrant, java dispose d'un système..println, javascript a une console.journal, imprime les choses facilement, bon pour le débogage, comment se fait il est tellement dur à imprimer des choses sur les rails ?
Pouvez-vous montrer le code que vous avez essayé pour logger? Quel environnement sont en cours d'exécution en vertu de développement?
OriginalL'auteur Maz