2010-01-25 8 views
0

Je suis très nouveau sur Rails.Rails: Contrôleurs et Route

Q1. Quelle est la route entre le contrôleur et la vue? Disons que j'ai un contrôleur appelé store_controller

Je n'ai pas de méthode dans ce contrôleur mais j'ai une vue appelée "liste"

puis, je suis capable d'appeler localhost: 3000/store/list ... Pourquoi suis-je capable de l'appeler sans avoir d'action de liste dans manette?

Q2. Que faire si j'ajoute la méthode de liste comme ci-dessous dans le contrôleur? Quel sera l'itinéraire si j'appelle localhost: 3000/store/list? la méthode de la liste du contrôleur, puis, vue? OU Afficher la première méthode et la liste du contrôleur? ou la méthode de liste du contrôleur ne sera jamais appelée? En fonction de mon test, la méthode de liste du contrôleur ne s'appelle jamais. Je ne suis pas sûr pourquoi. Je suis le livre "Agile Web Development avec Rails, 3rd Edition" et je suis bloqué à "Task C: Cart Creation".

Q3. Comment appeler la méthode du contrôleur de la vue sans utiliser d'assistant ou sans avoir de fichier de modèle pour cette méthode? Disons que j'ai une méthode appelée DoSomething dans Controller. Puis-je appeler cette méthode de vue comme ci-dessous?

def DoSomething 
    logger.Write 'd' 
end 

<%= link_to "Do It", :action => "DoSomething" %> 

Basé sur mon test, cela ne fonctionne pas.

Éditer: En fait, la vue peut appeler le contrôleur via Http Post. Disons que ce que nous voyons à l'écran est appelé vue. Si vous cliquez sur le bouton, ce sera http-post et appellera le contrôleur. c'est ce que je veux dire en appelant la méthode du contrôleur de la vue ..

Q4. Comment écrire le journal dans un fichier journal personnalisé? Si j'utilise logger.Write alors tout le journal sera écrit dans development.log. Comment puis-je avoir mon fichier journal personnalisé?

Q5. Est-il possible de créer comme un planificateur dans Ruby and Rails? Devrais-je utiliser Ruby ou Rails si je veux créer quelque chose comme un planificateur ou un travail back-end? comme ping un flux toutes les secondes et si de nouveaux changements puis obtenir les données et les insérer dans la base de données.

+0

Si vous n'êtes pas clair sur ma question, s'il vous plaît n'hésitez pas à me le faire savoir .. –

+0

Pour Q5, je pense que je peux utiliser rufus-scheduler gem –

Répondre

2

Cela peut nécessiter plusieurs questions: P ... mais c'est aussi une bonne base pour un wiki.

Q1. Rails utilise convention - si vous avez une vue appelée "liste", les rails sont assez intelligents pour traiter cela comme si une méthode de liste existait. Bien sûr, comme il n'y a pas de méthode, vous n'aurez aucune logique, mais la vue sera toujours rendue.

Q2. Si vous ajoutez une méthode de liste, Rails appellera maintenant ceci. Encore une fois, Rails est assez intelligent pour supposer qu'une action de liste correspond à la vue de la liste. Si vous souhaitez appeler une vue différente, vous pouvez utiliser la méthode "render" intégrée du contrôleur.

Q3. En général, vous ne devez PAS appeler une méthode de contrôleur à partir de la vue. Ce n'est tout simplement pas une partie du modèle MVC. Vous pouvez passer des données dans une vue, vous pouvez utiliser une aide pour toutes les méthodes spécifiques à la vue requises.Si vous avez une grande logique personnalisée, vous pouvez commencer à pousser du code dans vos modèles et même construire des modules et des classes qui vivent dans votre répertoire/lib.

Q4. Il existe un certain nombre de plugins et d'extensions de journalisation. Je ne les ai jamais utilisés, car j'ai toujours trouvé le défaut plus que suffisant.

Q5. Ceci est certainement une question tout à fait différente. Suggérer de commencer un nouveau, mais faire une recherche car je sais que cela a été abordé assez largement sur SO avant. Il y a un certain nombre de mécanismes qui fonctionnent avec Rails pour la planification.

+0

Merci. Q2. Lequel devrait appeler en premier? Je veux dire, Controller.List puis ListView? ou ListView, puis Controller.List? Q3. D'accord. Mais je devrais pouvoir appeler Model from View, non? Disons que je suis en train d'implémenter "Enregistrer" ... Je vais devoir appeler Model.Save() depuis View, non? –

+0

Vous n'avez pas besoin d'appeler la méthode du contrôleur ... les rails les manipulent pour vous. Vous appelez model.save à partir du contrôleur. La vue devrait seulement avoir une logique de présentation. –

+0

Désolé. Je ne comprends pas comment Rails le gère pour moi. Si nous appelons http: // localhost/store/newstock, alors Rails appellera automatiquement la vue "New Stock", n'est-ce pas? Mais si l'utilisateur clique sur le bouton "Enregistrer", je devrai appeler Controller.Save ou Model.Save from View. Droite? Comment Rails sait-il automatiquement que je veux appeler Enregistrer si je ne l'ai pas mentionné dans View? –