我正在使用Act_As_Taggable_On gem创建一个简单的项目标记应用程序。
添加项目,并为每个项目添加标签(在我的案例中为'types'/'type_list')效果很好。我遇到的问题是如何使用Act_As_Taggable_On删除单个标签。我想要的是能够单击每个标记旁边的“x”文本链接(请参阅链接)以从该项目type_list中删除标记。
我搜索了文档并找到了一个方法:
project.type_list.remove("your tag")
但我需要帮助的是如何在特定标记上调用remove方法,特别是因为整个事情都是用.each进行迭代
我的控制器和型号代码非常简洁和标准 - 基于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 :(得分: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 %>
当然你应该添加一些卫生设施,但它应该以这种方式工作......
答案 1 :(得分: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'代码以传递:tag params通过上面更新的路线:
<% 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!