2016-01-01 2 views
-1

Dans mon application rails, j'ai une page d'élément qui répertorie les balises d'un élément. Les utilisateurs peuvent ajouter des tags aux éléments. Je souhaite que l'utilisateur actuel puisse supprimer des balises, mais uniquement pour les balises qui ont été ajoutées à cet élément spécifique par l'utilisateur actuel. Je veux le faire par ajax. Mon code pour faire la liste des balises pour la vue ressemble à ceci:Comment autoriser l'utilisateur actuel à supprimer des balises possédées avec acts-as-taggable-on

<div id="tags">Tags: 
    <% @item.all_tags_list.each do |t| %> 
    <span class="tag-container"> 
     <%= link_to t, tag_path(t) %> 
     <% if @item.tags_from(current_user).include?(t) %> 
     <span> 
      <%= link_to "×", '#' %> 
     </span> 
     <% end %> 
    </span> 
    <% end %> 
</div> 

La ligne générée ressemble à quelque chose comme: Tags: tag1 tag2 tag3 x. Dans ce cas, seul tag3 a été ajouté à la page de l'élément en cours par l'utilisateur actuel. Je souhaite que l'utilisateur actuel puisse cliquer sur le x et supprimer tag3 de l'élément. Si tag2 a également été ajouté par l'utilisateur actuel, il ressemblerait à ceci: Tags: tag1 tag2 x tag3 x.

Comment est-ce que je configure la route et la méthode pour les items_controller pour accomplir ceci? Je crois qu'il finirait par être quelque chose comme:

def remove_tag 
    @item = Item.find_by_id(params[:id]) 
    tag = ???????? 
    @item.all_tags_list.remove(tag) 
    @item.save 
    respond_to do |format| 
    format.js 
    end 
end 

mais comment puis-je dire le contrôleur qui balise que je veux supprimer en cliquant sur le x, et comment pourrais-je créer l'itinéraire. Il y aura probablement plusieurs étiquettes avec un x à côté d'elles sur une page donnée.

+0

Pas votre réponse complète, mais si vous voulez que le current_user ne supprime que ses balises quelque chose comme ceci: 'tag = current_user.tags.find (params [: id])' de sorte que vous devez l'utiliser uniquement pour les utilisateurs actuels Mots clés. –

+0

Je ne pense pas que c'est correct. Je souhaite supprimer les balises de l'élément appartenant à l'utilisateur actuel. Votre ligne de code trouverait des balises sur l'utilisateur qui dans mon cas il n'y en a pas. – user4584963

+0

Le concept est le même. Puis étendez la partie 'current_user.items.find (...)'. –

Répondre

0

Si vous utilisez quelque chose comme concevoir pour l'authentification, vous avez une méthode current_user dans votre contrôleur qui pointe vers le modèle utilisateur connecté.

Alors si vous avez des associations comme celles-ci:

class User < ActiveRecord::Base 
    has_many :items 
end 

class Item < ActiveRecord::Base 
    has_many :tags 
end 

Vous pouvez utiliser ces associations pour rechercher des balises qui sont APPARTENANT aux éléments du current_user créé.

Comme:

def show 
    @item = current_user.items.find(params[item:id]) 
    @tag = item.tags.find(params[:id]) 
end 

routes:

resources :items do 
    resources :tags 
end 

Ceci est seulement par exemple.

+0

J'ai encore besoin d'un moyen de cibler l'étiquette spécifique à supprimer. Un utilisateur peut avoir plusieurs balises possédées pour un élément donné. L'utilisateur actuel devrait être en mesure de voir tous les tags sur un élément mais uniquement en mesure de supprimer les tags appartenant à l'utilisateur actuel. Je ne comprends pas le code des routes que vous avez publié. – user4584963