2010-12-14 45 views
2

J'essaie d'afficher une fenêtre modale (en utilisant jquery ui dialog) à l'utilisateur depuis mon contrôleur.Lancer le modal à partir du contrôleur

Par exemple:

def create 
    if params[:id] 
    #do something 
    else 
    #show a modal window with a partial as content 
end 

Thx pour votre aide =)

+0

Comment vous appelez votre créer une action, par votre soumettre ou par une méthode Javascript – shingara

+0

j'utiliser une soumission. – Flyingbeaver

+0

voulez-vous comme ceci 'si @valid_attributes puis enregistrer et rediriger else render new et show modal form' ?? – Rohit

Répondre

1

C'est une solution, mais fonctionnera probablement pour vous

Contrôleur

def create 
    if params[:id] 
    #true code 
    else 
    render :new 
    @dialog = true 
    end  
end 

sur vous nouveau .html.erb

<% if @dialog %> 
    <%= #dialog code %> 
<% else %> 
    <%= #normal code %> 
<% end %> 

Espérons que cela fonctionne.

MISE À JOUR

Si ce que je vous ai demandé dans le commentaire est correct, alors vous pouvez le faire

dans votre new.html.erb vous pouvez le faire

<% form_for @product do |f| %> 
    <% if @product.errors %> 
    <%= #dialog code %> 
    <% end %> 
<% end %> 
+0

Salut, merci pour la réponse. J'ai déjà pensé à cette solution mais je voulais trouver une approche plus élégante. – Flyingbeaver

0

Vous ne pouvez pas montrer un jQuery dialogue à partir d'un contrôleur, car vous ne pouvez pas exécuter JavaScript sur le serveur. Le plus proche que vous pourriez trouver est de renvoyer une chaîne JavaScript à évaluer du côté client, mais c'est une très mauvaise pratique. Votre meilleur pari est d'enlever quelque chose sur le côté de serveur et de faire votre code de dialogue du côté de client. Si vous ne voulez pas un tas de JavaScript dans vos modèles erb, vous pouvez appeler une fonction à partir de là, ou vous pouvez faire votre soumission via AJAX et soit faire votre gestionnaire faire le dialogue ou rendre un modèle js.erb qui peut rendre les deux partiels et faire JavaScript. Faites-moi savoir si vous voulez un exemple de ce qui précède et je verrai si je peux en fournir un.

+0

Eh bien, je suis intéressé de voir la façon la plus propre de le faire, et aussi la façon la plus sèche :) thx pour notre temps – Flyingbeaver