2017-02-07 4 views
1

imbriquée J'ai la configuration des routes comme les suivantes:Rails form_for comme: avec des ressources

resources :projects do 
    resources :project_factors, as: factors 
end 

J'aime avoir le as: :factors si la route devient:

project_factor_path(@project, @project_factor) 

au lieu de

project_project_factor_path(@project, @project_factor) 

mais j'ai des problèmes pour obtenir form_for pour générer la bonne route.

form_for [@project, @project_factor] échoue (comme prévu), car il essaie d'utiliser project_project_factor_path, alors j'ai essayé:

form_for [@project, @project_factor], as: :factor 

mais échoue avec exactement la même erreur.

Existe-t-il un moyen d'obtenir des rails pour générer le chemin correct ici sans définir explicitement le bon paramètre url pour le cas de création et de mise à jour?

+0

Cette question précédente: http://stackoverflow.com/questions/10906793/how-to-generate-the-proper -url-for-a-nested-resource semble indiquer que si vous utilisez un espace de nom sur le nom de la classe, cela peut interférer avec la génération automatique de votre route à partir de l'objet ... avez-vous nommé votre classe de facteurs de projet 'Project :: ProjectFactor' ??? –

+0

Non, juste nommé ProjectFactor: 'class ProjectFactor Jared

Répondre

0

Pas idéal, mais vous pouvez passer dans le chemin séparément aux objets par exemple quelque chose comme:

form_for [@project, @project_factor], :url => project_factor_path(@project, @project_factor) 

(Note: non testé)

Il se sent un peu redondant me si ... ce qui est exactement ce que vous essayiez de réduire, donc probablement pas une bonne solution pour vous: P

Une alternative pourrait être simplement de renommer votre project_factor en factor. Vous pouvez toujours donner le nom de la table de base de données comme project_factors (utilisez self.table_name = 'project_factors' dans la classe pour Rails pour le trouver).

Pour moi, project/project_factors se sent un peu comme schtroumpf-frappe ...;) YMMV

+1

Oui, comme je l'ai mentionné, définir explicitement l'URL est ce que j'essaie d'éviter depuis lors, je dois avoir une condition sur le formulaire pour si l'enregistrement est enregistré ou ne pas. Renommer le modèle n'est pas vraiment une option ici, ProjectFactor hérite déjà de Factor. Ma question est vraiment pourquoi «as» dans form_for n'a aucun effet sur l'URL générée. – Jared

+0

ouais ... et je suis d'accord c'est une bonne question (à laquelle je ne connais pas la réponse) ... pourrait être utile de se plonger dans le code source de 'url_for' (bien que ce soit probablement un labyrinthe de lapin) –