0

Ich erstelle eine einfache Projekt-Tagging-Anwendung mithilfe des Gemme Act_As_Taggable_On.Wie erstelle ich 'Remove Tag' Links mit Acts_As_Taggable_On in Rails?

Hinzufügen von Projekten und Hinzufügen von Tags (in meinem Fall 'types'/'type_list') zu jedem Projekt funktioniert gut. Wo ich feststecke, ist, wie man einzelne Tags mit Act_As_Taggable_On entfernt. Was ich möchte, ist in der Lage zu klicken auf den 'x' Textlink neben jedem Tag (siehe Link), um das Tag aus dem Projekt type_list zu entfernen.

habe ich gesucht, die Dokumentation und fand eine Methode entlang der Linien von:

project.type_list.remove("your tag") 

Aber was muss ich mit ist helfen, wie das Entfernen-Methode auf dem bestimmten Tag zu nennen, zumal das Ganze iterated mit .each tun

Mein Controller und Modellcode ist ziemlich minimal und Standard - basierend auf Act_As_Taggable_On docs. Hier ist meine Ansicht Code zur Erzeugung des Layout oben:

<h1><%= @title %></h1> 
<div class="column-left"> 
    <% @projects.each do |project| %> 
    <div class="p_wrapper"> 

     <table> 
     <tr> 
      <td><div class="project p_name"><%= project.name %></div></td> 
      <td><div class="p_link"><%= link_to 'Edit', edit_project_path(project) %></div></td> 
      <td><div class="p_link"><%= link_to 'Nuke', project, :confirm => 'Are you sure?', :method => :delete %></div></td> 
     </tr> 
     </table> 

     <table> 
     <tr> 
      <td> 
       <% project.type_list.each do |tag|%> 
       <div class="p_tag"> 
       <%= tag %> 
       <%= link_to "x", # %> <!-- THIS IS THE PART I'M STUCK ON --> 
       </div> 
       <% end %> 
      </td> 
     </tr> 
     </table> 

     <table> 
     <tr> 
      <td> 
       <%= form_for(project) do |f| %> 
       <%= f.text_field :inject_tags %> 
       <%= f.submit "Add Tag" %> 
       <% end %> 
      </td> 
     </tr> 
     </table> 

    </div> 

    <% end %> 

    <br /> 

    <%= link_to 'Add new project', new_project_path %> 
</div> 

Kann jemand mich in die richtige Richtung? Implementiere ich das richtig, um Tags tatsächlich wie beschrieben zu entfernen?

Danke Jungs!

Antwort

0

Basierend auf dem von @ Vapire vorgeschlagenen Code - endlich funktionierte eine funktionierende Lösung. Nur ein paar kleine Änderungen an der Ansicht, Route und Controller. Lassen Sie es mich wissen, wenn Sie etwas Zwiespältiges hier sehen - immer noch versuchen, Ruby/Rails gut zu verstehen, so dass alle Vorschläge/Refactoring Ideen willkommen sind.

Die aktualisierte Testseite befindet sich auf project-list.heroku.com.

Aktualisiert Projekte Controller aktuelle Projekt zu finden, entfernen: Tag aus Indexansicht durch Route geführt:

def remove_tag 
    @project = Project.find(params[:id]) 
    @project.type_list.remove(params[:tag]) 
    @project.save 
    redirect_to projects_path, :flash => { :success => "Updated - tag nuked."} 
end 

Aktualisiert Route:

resources :projects 
match 'projects/:id/remove_tag/:tag' => 'projects#remove_tag' 

der link_to 'x' Code aktualisiert passieren : Markieren Sie Params durch die aktualisierte Route oben:

<% project.type_list.each do |tag|%> 
    <div class="p_tag"> 
    <%= tag %> 
    <%= link_to 'x', {:action => "remove_tag", :id => project.id, :tag => tag, 
    :controller => "projects"} %> 
    </div> 
<% end %> 

Dies ist offensichtlich Neuland für mich so würde es begrüßen, wenn Sie eine andere/bessere Art der Behandlung dieses Problems haben, lass es mich wissen! Danke auch für deine Hilfe @Vapire!

1

Ich würde einfach eine neue Methode, um Ihre Projekte Controller hinzufügen, etwa so:

def remove_tag 
    Project.find(params[:id]).type_list.remove(params[:tag]) 
end 

Und in Ihren Routen

Datei
resources :projects do 
    member do 
    put 'remove_tag', :as => :remove_tag 
    end 
end 

Und in Ihrer Ansicht

<%= link_to 'x', remove_tag_project_path(project), :tag => tag, :method => :put %> 

Of Natürlich sollten Sie etwas Hygiene hinzufügen, aber es sollte so funktionieren ...

Verwandte Themen