2010-10-29 4 views
0

Ainsi, chaque projet rails i semble se heurter à ce problème et serait vraiment reconnaissant si quelqu'un pouvait me éclairer: Avec une configuration « normale »Comment accéder aux messages de validation en partiels?

lorsque le formulaire se trouve sur le point de vue immédiatement associé à l'URL/contrôleur, il est assez simple, un render => :action en cas d'échec affichera le message de validation. Maintenant, ce que j'ai est une forme dans une séance partielle sur une page dont l'URL/contrôleur est un show /: id et non l'action de création du formulaire, la validation se déclenche, mais je ne peux pas afficher le message de validation parce que je ne peux pas déclencher l'action de rendu correcte ... CLosest j'ai obtenu est un rendu => @object mais il n'y a pas css/layout, je peux passer un message à travers une redirection avec flash [] mais il se sent mal, même avec des messages d'erreur jquery/client ...

Alors, comment puis-je "proprement" afficher les messages de validation d'un formulaire dans un partiel (sous un autre contrôleur/action que la page parente)?

(merci d'avance pour votre aide)

edit: ne peut pas coller la chose réelle maintenant, mais je vais faire de mon mieux pour expliquer

i ont une page principale par exemple article/show/01, sur cette page est le contenu de l'article (@article) et puis au bas de la page est un _commentform partielle avec un formulaire pour poster un commentaire. Ce formulaire est lié à une action Créer d'un contrôleur différent (contrôleur de commentaires).

Maintenant, si la forme était sur son propre « page »/url au lieu d'une partielle, dire/commentaire/créer, je jus faire:

if @comment.save 
redirect_to @comment 
else 
render => :create 
end 

et la validation apparaissent normalement. Dans mon cas le formulaire est en aa partiel sur l'article/show/01 url, ce qui devrait être l'équivalent du code ci-dessus afin que les messages d'erreur d'échec de validation soient affichés sur l'URL parent, comme "render article/show/01 "? Je suis sûr que c'est facile mais je ne peux pas le faire fonctionner (je peux juste rediriger sur le succès mais ne peut pas afficher les erreurs avec un rendu)

Répondre

0

Je ne pense pas que le meilleur moyen d'afficher les erreurs de validation est de rendre un partiel. À mon humble avis, la meilleure façon d'afficher les messages d'erreur en utilisant les styles/css que vous ou votre webdesigner veut est d'implémenter votre propre méthode error_messages dans un FormBuilder.

Par exemple, voici la méthode error_messages que j'ai implémentée pour mon dernier projet.

Voici un exemple qui va afficher la liste des erreurs dans son ul/li avec des styles personnalisés ... Il suffit de personnaliser cela et mettre votre générateur de formulaire dans app/aides ...

class StandardBuilder < ActionView::Helpers::FormBuilder 
    def error_messages 
    return unless object.respond_to?(:errors) && object.errors.any? 

    errors_list = "" 
    errors_list << @template.content_tag(:span, "There are errors!", :class => "title-error") 
    errors_list << object.errors.full_messages.map { |message| @template.content_tag(:li, message) }.join("\n") 

    @template.content_tag(:ul, errors_list.html_safe, :class => "error-recap round-border") 
    end 
end 

Puis, en mes formes:

= form_for @post, :builder => StandardBuilder do |f| 
    = f.error_messages 
    ... 

Pas besoin d'afficher/rendre un autre partiel. Et c'est tout :).

+0

Salut, merci pour votre réponse, je ne suis pas en train faire des erreurs de validation d'affichage dans une partielle, il est juste que la forme en elle-même est dans une partielle et je voudrais juste afficher des erreurs de validation pour cela d'une manière simple/standard. Je ne suis pas sûr d'avoir bien compris votre méthode mais il faudrait quand même rendre le formulaire partiel pour afficher ce message personnalisé, je suis bloqué car je ne peux pas faire ça ... – Monza

+0

Je ne comprends pas votre problème. Vous voulez dire que toute votre forme est partielle et que vous voulez accéder à vos erreurs de validation ailleurs? S'il vous plaît bricoler/coller votre page principale et votre formulaire partiel. Merci. –

+0

J'ai modifié le post original pour inclure plus de détails. Merci! – Monza

0

Si vous voulez afficher quoi que ce soit (y compris les messages d'erreur) dans une partie que vous avez deux façons

1 - Définir dans l'action du contrôleur où la partie est appelée 2 - passer le message en tant que paramètre à la partielle

1 - Exemple

in your controller/action 

if @comment.save 
redirect_to @comment 
else 
@messages = "This is a message" 
render => :create 
end 

in your partial 

you can access the @message variable 

2 - faire passer la variable à la

partielle
render :partial => “<partial name>”, :locals => { :param1 => “value”} 

<partial name> – name of your partial (Ex /partials/footer) 

:params1 – parameter name 

“value” – value 

Espérons que cela aide

grâce

sameera

Questions connexes