J'ai un problème dû aux étanches et à la forme_for Aide dans les rails 3.
Les itinéraires - le fichier ressemble à ceci: Le formulaire ressemble à ceci: p> onglet - l'attribut est stocké dans les params [ : onglet], comme une chaîne
Mon problème est que cela génère des urls erronées dans le formulaire. Comment pourrais-je obtenir cela pour travailler?
L'URL généré sur l'article_Path (paramètres [: onglet], @ARTICH) fonctionne parfaitement bien p> p>
7 Réponses :
Vous pouvez spécifier le chemin explicitement:
<%= form_for(@article, :url => article_path(@article, :tab => params[:tab]) %>
Cela semble fonctionner agréable sur la pièce d'édition, mais si je veux utiliser le même formulaire pour les nouveaux et modifier, il échoue avec l'erreur suivante en Nouveau car le nouvel article n'a pas d'identifiant
Essayez:
<%= form_for [:tab, @article] do |f| %> <%= f.label :title %> <%= f.text_field :title %> etc. <%end%>
Ensuite, il cherche le tab_article_path qui n'est pas défini.
Quels sont les itinéraires générés par votre fichier routes.rb? essayez "$ routes râte" dans un terminal
La réponse que j'ai proposée était assez moche, mais travaille avec la mise à jour et crée:
def default_url_options(options={}) { :tab => params[:tab] } end
Merci, j'ai eu exactement le même problème et je cherchais une solution à cela. Je pensais un peu qu'il y aurait une solution plus élégante. FYI, regardant à travers l'aide des rails, il semble préférer #persisté? à #new_record?, alors peut-être que la meilleure pratique serait de le faire à la place: <% = form_for (@article,: url => (@ article.persisted ?? Article_path (paramètres [onglet], @ARTICAT : Articles_Path (Params [: onglet]) Do | F |%> Code>
Default_url_Options Code> Dans le contrôleur, il peut être privé.
J'ai trouvé que ceci soit un problème vraiment irritant et que cela m'avait rencontré pour le moment avec le patch de singe suivant. Générique comme ceci, c'est un peu de soumission, car vous passez simplement le sac entier des paramètres à polymorphic_url, ce qui est la formule_for utilise sous la capuche pour deviner la route. Une approche plus concise serait de fusionner juste la valeur de portée.
Ma solution: P>
https://gist.github.com/1848467 p>
Dans une situation très similaire, j'ai défini la portée des itinéraires comme ci-dessous: maintenant j'ai des aides comme dans des exemples ci-dessus Après avoir intégré sympa_id dans cette solution, j'ai eu quelques jolies URL. Par exemple "http://mydomain.com/elections-2012/Questions/my-question" p> p> Election_Questions_Path (@election) CODE> P> < p> dans les formes que je peux utiliser: p>
@election code> est une instance du modèle électoral. P>
Ma solution de problème similaire avec form_for and Slopes em> est de définir une nouvelle méthode dans et à ma vue, j'ai fait p> routes problématiques.rb partie p> ... et pour être géré avec Aidateurs /
: onglet code> paramètre Vous pouvez l'ajouter à la méthode de l'assistance. P> P>
Je ne suis pas sûr à quel point cela va, mais cela fonctionne sur les rails 6. J'utilise: Ceci fonctionne en raison de la syntaxe de génération d'URL de tableau. Dans le cas code> nouveau code>, @ARTICLE code> est détecté comme ne pas être persisté et itinéraire vers la ligne
Post Code>. Dans le cas code> edit code>,
@ARTICLE code> est détecté comme étant persisté et itinéraires vers l'itinéraire
Mettre code> avec l'ID. P> P> P> P> P> P> >