J'essaie d'écrire une application dans les rails 3 et j'ai du mal à trouver les routes et les contrôleurs pour un test que je veux que l'utilisateur prenne. Les exigences de base pour cette application sont les suivants:Routes dans Rails3 - Contrôleur et routes pour 2 fonctions de poste
- Les utilisateurs, les tests et les questions sont tous dans des modèles distincts.
- Un utilisateur a de nombreux tests. Un test has_many Questions
- Fournissez un lien sur la page user_profile vers/test/new pour créer l'enregistrement de test.
- Fournissez un lien sur/test/new to/test /: id/part1 (où: id est test_id) afin que l'utilisateur puisse terminer la première partie du test. Les questions seront extraites de la base de données et présentées sur cette page.
- Fournissez un lien sur/test /: id/part1 à/test /: id/part2 afin que l'utilisateur puisse terminer la deuxième partie du test. Encore une fois, les questions sont extraites de la base de données.
- Fournissez un lien sur/test /: id/part2 pour soumettre le test et revenir au profil de l'utilisateur.
J'ai terminé les modèles, qui passent même leurs tests, donc je pense que je l'ai terminé parties 1 et 2.
user.rb
Class User < ActiveRecord::Base
has_many :tests
end
test.rb
Class Test < ActiveRecord::Base
belongs_to :user
has_many :questions
end
question.rb
Class Question < ActiveRecrod::Base
belongs_to :test
end
Mes problèmes commencent lorsque j'essaie de mettre ces modèles ensemble en utilisant des routes et des contrôleurs.
routes.rb
resources :users
resources :tests do
member do
post 'part1'
post 'part2'
end
end
utilisateurs/show.html.erb
<%= link_to "Start The Test", new_test_path %>
tests/new.html.erb
<%= link_to "Part 1", part1_test_path(@test) %>
tests_controler.rb
class TestsController < ApplicationController
def new
@test = Test.new(current_user)
end
def part1
# still just a stub
end
end
Je reçois cette erreur lorsque je clique sur le lien pour prendre la partie 1 du test:
No route matches {:action=>"part1", :controller=>"tests", :id=>#<Test id: nil, taken_at: nil, user_id: nil, created_at: nil, updated_at: nil>}
Toute aide sur ce serait grandement apprécié.
Merci pour la réponse Mark. Mais, cette solution ne me donnera-t-elle pas différentes routes pour part1 et part1 (c'est-à-dire part1_test_path =/test/part1 et part2_test_path =/test/123/part2)? Je voudrais être cohérent entre ceux-ci afin que le code de base soit plus maintenable. En utilisant votre idée que le membre attend un test existant, j'ai décidé d'appeler le contrôleur de création sur la page/test/new et d'essayer de rediriger vers part1. Cela semble prometteur. – spinlock
Personnellement j'irais avec mon approche mais la tienne est tout aussi valable. Vous pourriez vouloir regarder ces épisodes de railscasts sur des formes complexes si vous ne l'avez pas déjà fait. http://railscasts.com/episodes/73 Ils sont pour les rails 2 mais à part une petite syntaxe valide pour 3. – mark
Merci Mark. Y a-t-il quelque chose à propos de votre méthode qui serait plus en accord avec "THE RAILS WAY"? Je suis nouveau sur les rails et je veux suivre le style canonique autant que possible parce que je prévois de transmettre cette application à d'autres développeurs, donc j'essaie de suivre - et d'apprendre - les conventions autant que possible. – spinlock