7
votes

form_for et scopes, rails 3

J'ai un problème dû aux étanches et à la forme_for Aide dans les rails 3. Les itinéraires - le fichier ressemble à ceci: xxx

Le formulaire ressemble à ceci: xxx

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


0 commentaires

7 Réponses :


1
votes

Vous pouvez spécifier le chemin explicitement:

<%= form_for(@article, :url => article_path(@article, :tab => params[:tab]) %>


1 commentaires

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



10
votes

Essayez:

<%= form_for [:tab, @article] do |f| %>
   <%= f.label :title %>
   <%= f.text_field :title %>
    etc.
<%end%>


2 commentaires

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



12
votes

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


2 commentaires

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 |%>


Default_url_Options Dans le contrôleur, il peut être privé.



0
votes

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:

https://gist.github.com/1848467 xxx


0 commentaires

0
votes

Dans une situation très similaire, j'ai défini la portée des itinéraires comme ci-dessous: xxx

maintenant j'ai des aides comme Election_Questions_Path (@election) < p> dans les formes que je peux utiliser: xxx

dans des exemples ci-dessus @election est une instance du modèle électoral.

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"


0 commentaires

1
votes

Ma solution de problème similaire avec form_for and Slopes est de définir une nouvelle méthode dans Aidateurs / / _helper.rb , par exemple la mine est sessions_helper .rb qui contient xxx

et à ma vue, j'ai fait xxx

routes problématiques.rb partie xxx < / Pré>

... et pour être géré avec : onglet paramètre Vous pouvez l'ajouter à la méthode de l'assistance.


0 commentaires

0
votes

Je ne suis pas sûr à quel point cela va, mais cela fonctionne sur les rails 6. J'utilise: xxx

Ceci fonctionne en raison de la syntaxe de génération d'URL de tableau. Dans le cas nouveau , @ARTICLE est détecté comme ne pas être persisté et itinéraire vers la ligne Post . Dans le cas edit , @ARTICLE est détecté comme étant persisté et itinéraires vers l'itinéraire Mettre avec l'ID. >


0 commentaires