2010-10-23 22 views
0

J'ai un modèle appelé la société, et dans la vue Afficher les éléments suivants sont:Comment puis-je faire balises en ligne modifiable (ou submittable sans avoir besoin de passer en mode « édition » pour le modèle

<div id = 'tags'> 
    <strong>Tags:</strong> 
    <% unless @company.tag_list.empty? %> 
    <%= @company.tag_list %> 
    <% end %> 
    <% form_remote_tag(:url => {:action => 'update'}, 
        :update => 'tags') do %> 
    <%= text_field :company, :tag_list %> 
     <%= submit_tag 'Save' %> 
    <% end %> 
</div> 

I am en utilisant acts_as_taggable_on petit bijou

Ceci est la méthode de mise à jour dans le contrôleur de l'entreprise.

def update 
    @company = Company.find(params[:id]) 
    if @company.update_attributes(params[:company]) 
     flash[:notice] = "Successfully updated company." 
     redirect_to @company 
    else 
     render :action => 'edit' 
    end 
    end 

Je suppose que mon résultat souhaité serait que je pourrais ajouter des balises, voir les ajouter via ajax, tout cela sans nee Ding pour modifier le modèle, mais à partir du spectacle Voir, un peu comme la façon dont vous pouvez ajouter des balises dans Wordpress.

MISE À JOUR: Ceci est l'erreur que je reçois (on dirait qu'il n'utilise pas l'action de mise à jour:

POST http://localhost:3000/companies/10 
No action responded to 10. Actions: create, destroy, edit, email_this_week, index, new, show, and update 

Hmmm, ne sais pas pourquoi il fait cela .... il devrait faire une action de mise à jour ?, juste ce que je dois faire quelque chose dans mes voies

Répondre

0

Vous êtes presque là.

D'abord vous créez un partiel tags qui rend vos étiquettes et votre formulaire ajax (que vous avez montré dans votre question).

Ensuite, l'intérieur de votre contrôleur méthode vous écrivez:

def update 
    @company = Company.find(params[:id]) 
    if request.xhr? 
    # add the given tag to the company 
    @company.tags << params[:company][:taglist] 
    @company.save 
    render :partial => 'tags' 
    else 
    if @company.update_attributes(params[:company]) 
     flash[:notice] = "Successfully updated company." 
     redirect_to @company 
    else 
     render :action => 'edit' 
    end 
    end 
end 

ce que je fais: i test si la demande est une demande ajax (xhr?) puis essayez de mettre à jour les balises du champ qui a été donné: vous devrez corriger ce code je suppose. Je suppose que juste faire update_attributes ne fonctionne pas, car vous voudrez ajouter une balise à une liste de balises existantes. Si cela réussit, vous restaurez le partiel qui remplacera le précédent, en raison de l'option update que vous avez spécifiée dans le formulaire.

Cela devrait vous aider à démarrer.

Pour l'améliorer davantage, vous devez ajouter à chacune de vos étiquettes une image (une croix rouge) avec un lien pour supprimer l'étiquette donnée.

+0

merci! Je ne connaissais pas .xhr? méthode ... qui fonctionne en 2.3.5? oui, j'ai l'impression que la mise à jour ne fonctionne pas non plus ... laissez-moi jouer avec cela, alors je prends le code de l'étiquette dans la vue et en faire une partie? – Angela

+0

c'était proche - nécessaire pour contourner et peut-être il y a un problème avec la façon dont mon instance fait le routage. – Angela

0

Il y a quelques plugins jquery qui ont été appelés modifier en place ... Peut-être que cela vous aide (même si je spécifié l'action?):

https://stackoverflow.com/questions/708801/whats-the-best-edit-in-place-plugin-for-jquery

+0

Que dois-je faire dans le contrôleur? l'un des plugins que j'ai regardé, mais ne pourrait jamais travailler mieux-edit-in-place avait des aides avec tout et était conforme REST .... comme le cocnept, mais n'a pas fonctionné .... – Angela