2009-03-23 6 views
2

J'ai une relation un-à-plusieurs entre ma classe Profile et la classe Photos. Le profil contient les informations de l'utilisateur et les photos contiennent les photos de l'utilisateur. Actuellement, le lien "Importer une photo" s'affiche en bas de la vue de profil. Je veux que le lien apparaisse sur une vue séparée au lieu de tout bourrer sur le même formulaire. Dois-je simplement créer une nouvelle vue appelée profile_photo.html.erb pour afficher ce lien ou dois-je créer un nouveau contrôleur et un nouveau modèle associés aux photos? Quelle est la pratique recommandée?Ruby on Rails: Nouveau contrôleur pour les photos?

Répondre

3

La classe "Photos" devrait s'appeler "Photo", car Rails utilise des noms singuliers pour les modèles.

Oui, vous devez créer un nouveau contrôleur pour créer des photos car il s'agit d'une autre ressource. Vous voudrez probablement éditer les photos éventuellement, en ajoutant des descriptions et ainsi de suite.

3

Je suis d'accord avec Radar, vous aurez envie de créer un PhotosController. Lorsque vous faites cela, vous pouvez aller plus loin et définir la relation has_many dans le fichier routes.rb. Comme si:

map.resources :photos 
    map.resources :profiles, :has_many => :photos 

Cela va générer des urls comme profile_photos_path, new_profile_photo_path, etc ... exécutez la commande rake routes pour voir ce qu'il vous donne. Cela aidera à garder votre code SEC et facile à lire.

+0

Lorsqu'un nouvel utilisateur remplit le formulaire de profils, il est redirigé vers le formulaire de photos, mais comment puis-je insérer profile_id dans la table des photos? Devrais-je passer le profil_id en faisant un redirect_to dans le contrôleur de profils? Dans le contrôleur de photos, je peux insérer manuellement le profil_id passé. – Max

+0

Une fois que l'utilisateur a rempli un formulaire de profils, les dirigez-vous vers photos_path ou profile_photos_path? Si vous utilisez le plus tard, le profile_id doit être inclus dans l'url et vous pouvez y accéder via le hash params. – vrish88