0

我正在使用Act_As_Taggable_On gem創建一個簡單的項目標記應用程序。如何在Rails中使用Acts_As_Taggable_On創建「刪除標記」鏈接?

添加項目,併爲每個項目添加標籤(在我的情況下'類型'/'type_list')效果很好。我被卡住的地方是如何使用Act_As_Taggable_On刪除單個標籤。我希望能夠點擊每個標記旁邊的「x」文本鏈接(請參閱鏈接),以從該項目的type_list中刪除標記。

我搜索的文件,發現沿線的方法:

project.type_list.remove("your tag") 

但我需要的是幫助如何調用remove方法在特定的標籤,特別是因爲整個事情是正在迭代。每個做的都是

我的控制器和模型代碼非常小,並且基於Act_As_Taggable_On文檔的標準。這裏是我生成上述佈局的視圖代碼:

<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> 

任何人都可以指向正確的方向嗎?我是否正確實施了這個功能,以便能夠按照所述實際刪除標籤?

謝謝你們!

回答

0

基於@ Vapire的建議代碼 - 終於找到了一個可行的解決方案。只需對視圖,路線和控制器進行一些小的編輯即可。讓我知道如果你在這裏看到任何狡猾的東西 - 仍然試圖很好地掌握Ruby/Rails,所以所有的建議/重構想法都歡迎。

更新後的測試網站位於project-list.heroku.com。

更新項目控制器找到當前項目,刪除:標籤從索引視圖通過路由傳遞:

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 

更新路線:

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

更新了的link_to 'X' 的代碼傳遞:通過以上更新路線標記參數:

<% 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 %> 

這對我來說顯然是一個新的領域,所以如果您有不同的/更好的方式來處理這個問題,請讓我知道!此外,感謝您的幫助@Vapire!

1

我只想增加一個新的方法,以你的項目控制,像這樣:

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

而且在你的路由文件

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

而且在你看來

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

中當然,你應該增加一些衛生設施,但它應該這樣工作...

相關問題