acts_as_taggable_on 标签添加两次

2024-02-05

我有一个 RoR 应用程序,允许用户标记其集合中的项目。我使用 tag-it.js Jquery 插件并使用 Ajax 调用在 ItemsController 中添加和删除标签。我的问题是每个标签添加两次,因此当我执行 @item.tags.each 时,所有标签都会显示两次。

项目控制器:

  def add_tag 
    @collection = current_user.collections.find(params[:collection_id])    
    @item = @collection.items.find(params[:id])
    @item.tag_list.add(params[:tag])   
    current_user.tag(@item, :with => @item.tag_list.to_s, :on => :tags)          
    @item.save   

    render nothing: true 
  end 

  def remove_tag 
    @item = current_user.items.find_by_id(params[:id])       
    @item.tag_list.remove(params[:tag]) 
    current_user.tag(@item, :with => @item.tag_list.to_s, :on => :tags)          
    @item.save 

    render nothing: true 
  end 

使用 Tag-it.js 处理 AJAX 标记的 Javascript:

$('#item_tags').tagit({
      onTagAdded: function(event, tag) {          
       var add_url = $('#item_tags').attr("data-add-url");              
        $.ajax({
          url: add_url,                      
          data: {tag: tag.text().substring(0, tag.text().length-1)},                                   
        })             
      }, 
      onTagRemoved: function(event, tag) {
        var remove_url = $('#item_tags').attr("data-remove-url"); 
        $.ajax({
          url: remove_url,  
          type: 'DELETE',                        
          data: {tag: tag.text().substring(0, tag.text().length-1)},                                  
        })
      },
      tagSource: function(search, showChoices) {
        var autocomplete_url = $('#item_tags').attr("data-auctocomplete-url");             
        $.ajax({
          url: autocomplete_url,        
          data: {term: search.term},                              
          success: function(choices) {
            showChoices(choices);
          }
        })           
      }
});

item#_form 视图,用户在其中添加/删除标签:

<ul id='item_tags' class='tagit' data-remove-url="<%= remove_tag_collection_item_path %>" data-add-url="<%= add_tag_collection_item_path %>" data-auctocomplete-url="/collections/<%[email protected] /cdn-cgi/l/email-protection %>/items/autocomplete_tag_name"> 
      <% @item.tags.each do |tag| %>   
        <li><%= tag.name %></li>            
      <% end %>                   
</ul>

我必须注意,有必要拥有标签所有权(由 current_user ),以便 Jquery 自动完成仅根据当前用户以前的标签而不是所有用户完成。我认为问题是我必须将标签添加到 tag_list,然后将 tag_list 添加到用户项标记。我找不到解决此问题的方法,因为当调用 current_user.tag() 时, current_user.tag() 方法似乎会覆盖以前的项目标签,因此我必须将新标签添加到以前的标签中以保留它们。

此外,当我提交 item#_form 时,我需要以某种方式让 update 方法忽略标签属性,因为它试图将它们保存到项目中,但它们已经通过 AJAX 调用保存,所以我收到此错误:

ActiveRecord::AssociationTypeMismatch in ItemsController#update
ActsAsTaggableOn::Tag(#82082080) expected, got String(#72294010)

提前致谢。

附言。以下是我如何在 ItemsController 中实现自动完成功能:

def get_autocomplete_items(parameters)
    tags = current_user.owned_tags.named_like(parameters[:term])   
end

你是对的:

我认为问题是我必须将标签添加到 tag_list 中并且 然后将 tag_list 添加到用户项标记中。我找不到办法 围绕这个,因为 current_user.tag() 方法似乎覆盖 调用 current_user.tag() 时的前一个项目标签,所以我必须 将新标签添加到以前的标签以保留它们。

The .tag方法用给定列表覆盖现有标签。因此,如果您想添加新标签,似乎您需要将新标签附加到现有标签,然后传入该新列表。然而,.tag_list.add实际上也创建标签。

所以,当你这样做时:

  @item.tag_list.add(params[:tag])   
  current_user.tag(@item, :with => @item.tag_list.to_s, :on => :tags)          

您确实添加了两次新标签。

当我这样做时:

tag_list = profile.tag_list // oops!
tag_list.add(tags)
self.tag(profile, with: tag_list, on: :tags)

我正在创建对 tag_list 的引用,然后对其调用 add 。我们需要做的是:

tag_list = profile.tags.map(&:name)

为我们正在标记的对象创建一个标记名称数组。然后我们就可以在列表的副本上调用add了,没问题!不再有重复的标签。

我很高兴遇到你的问题,因为它引导我找到了对我有用的答案。然而,如果图书馆提供了一种很好的方法来做到这一点,我会更高兴。仅通过阅读文档我无法找到一个好方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

acts_as_taggable_on 标签添加两次 的相关文章

  • 将 Twitter 引导样式添加到 Rails 表单助手

    在阅读建议我使用带有引导程序集成的 Simple form gem 的答案后 我安装了它并根据 simple form 说明创建了我的表单 但输入框向右浮动 这是布局 正在使用部分 shared reg 调用该表单 div class co
  • Rails - 使用 %W

    我有以下效果很好的 def steps w hello billing confirmation end steps first 但我想这样做 def step title w Upload a photo Billing Info Con
  • Rails 中的 plusDomains.circles.addPeople 的 Google API 产生 403 Forbidden

    Using Google API Ruby 客户端 https github com google google api ruby client class GooglePlus def self follow contact contac
  • Heroku 上的 Google Vision API 身份验证

    在 Heroku 上验证 Vision API 的最佳 简单方法是什么 在开发中我只使用 vision Google Cloud Vision new project instacult keyfile path to keyfile js
  • 使用 RSpec 进行 Rails 片段缓存测试

    我觉得这是一个没有太多记录的主题 至少我在这里找到最佳实践时遇到了很多麻烦 我使用 cache key 在视图中进行片段缓存 tbody employees each do employee cache employee do tr emp
  • 在您的装置数据中发现外键违规。确保您没有引用关联中不存在的标签

    我运行一个测试 rake test TEST test system my test rb 并看到这个 rake test TEST test system my test rb Running 1 tests in a single pr
  • Rails 7 缺失部分

    我正在升级到 Rails 7 1 并在使用 JS 部分的视图中遇到奇怪的错误 缺少部分 account stripe js erb application stripe js erb 与 locale gt fr formats gt ht
  • 多租户 Rails 应用:不同技术的优缺点是什么?

    我最初是为一位客户编写 Ruby on Rails 应用程序的 现在 我正在更改它 以便它可以用于不同的客户 我的最终目标是某些用户 不是我 可以单击按钮并创建一个新项目 然后生成所有必要的更改 新架构 新表 代码处理 无需任何人需要我编辑
  • 如何在 Rails 中将随机日期时间四舍五入到小时开始?

    基本上我想获得去年内的随机日期时间 rand 1 year ago gt Sun 22 Sep 2013 18 37 44 UTC 00 00 example 但是我该如何指定或限制这个时间呢 例如 Sun 22 Sep 2013 18 0
  • 如何在 Rails 3 项目中包含 SSL 证书

    我开发了一个 Rails 3 项目 它使用thin作为服务器 与 Devise 和 Doorkeeper 一起进行身份验证 我想在我的项目中添加 SSL 证书 我看过一些描述如何在 Rails 3 项目中使用 SSL 证书的帖子 但没有一个
  • 将带撇号的字符串传递给辅助方法无法正确显示

    我正在使用 Rails 教程中的辅助方法 它将两个字符串连接在一起 以便在视图中的标题选择器中使用 它工作得很好 除非字符串中有撇号 当 group name 包含撇号时 结果如下 这是方法 app helpers application
  • 适用于移动应用程序的 Rails REST API。会议

    我正在创建一个移动应用程序 该应用程序拥有用户并与后端的自定义 Rails REST API 进行通信 我应该在登录时创建会话吗 或者我应该在每个请求中发送用户名和密码 如果会议是可行的方法 那么通常是如何实施的 只需生成令牌 并使用它们来
  • Rails - 格式日期字段

    如何设置 date field 的日期格式样式 我得到了以下表格 这是为日期字段呈现以下 HTML
  • MongoMapper 和 bson_ext 问题

    我无法让 MongoMapper 与我的 Rails 应用程序一起使用 我收到此错误消息 注意 C 扩展未加载 这是最佳 MongoDB Ruby 驱动程序性能所必需的 您可以按如下方式安装扩展 宝石安装 bson ext 如果安装后继续收
  • 将 gmaps4rails 与 https/SSL 结合使用

    我是 gmaps4rails 的忠实粉丝 它使向我们的网络应用程序添加地图变得非常容易 我现在遇到的唯一问题是 如果您在 https 页面上使用它 则会收到有关混合内容的安全警告 谷歌地图API确实支持https 所以我认为这只是将脚本引用
  • 在 SCSS 部分中使用 Rails 3.1 资源路径

    我有以下设置 app assets stylesheets application css scss require self require fancybox COLORS MIXINS FONT STACKS IMPORTS impor
  • 在 Rails 5 中结合 API 和 Web 视图

    从 Rails 5 开始 API gem 被合并进来 现在 如果我有 API 可以通过 AJAX 从网页调用 这会给我们留下什么 我正在这里寻找最佳实践 当然 我可以自己使用 JSON 序列化器创建一条路由 然后 就有可能将 API 调用完
  • 如何在自定义类上使用 ActiveModel 验证和回调?

    我正在尝试在自定义类上使用 ActiveModel 验证和回调 class TestClass include ActiveModel Validations define model callbacks validate attr acc
  • render_views 在 rspec 中做什么?

    我对 rspec 很陌生 对 Rails 也很陌生 在为控制器编写测试用例时 我注意到render views经常使用 这是做什么的 如果我不调用它会发生什么 它呈现控制器规范中的视图 如果不放置 render views 视图将不会渲染
  • 在运行时在 Rails 中向模型添加列(无需附加表)

    我试图让我的网络应用程序的管理员能够向模型添加一些新字段 该模型称为 Artwork 我想在运行时添加一个 test column 列 我只是在测试 所以我添加了一个简单的链接来做到这一点 它当然是参数化的 我设法通过迁移来做到这一点 de

随机推荐

  • PHP JSON 特殊字符

    我手上应该有返回一些json类型的结果 但由于特殊字符我无法输出 内容数组中的示例数据 Alt n Portakal 电影节的故乡 问题 JSON today array for i 0 i lt count olay tarih i ge
  • RxJs 中是否有“异步”版本的过滤器运算符?

    我需要通过针对某些 Web 服务检查条目来过滤可观察对象发出的条目 普通的 observable filter 运算符在这里不适合 因为它期望谓词函数同步返回判决 但在这种情况下 只能异步检索判决 我可以通过以下代码进行移位 但我想知道是否
  • 使用 Csrf 的 Spring Security 单元测试导致找不到 HttpServletResponse

    我无法在其他地方找到这个问题 我的单元测试设置如下 RunWith SpringJUnit4ClassRunner class SpringApplicationConfiguration classes Application class
  • Visual Studio 2013 Update 4 更改 MSFakes Shim 对象的默认行为

    我们有一套单元测试 其中一些使用 MS Fakes 在 Update 4 之前 它们运行成功 应用更新 4 后 实例化填充类型的测试失败 并出现 ShimNotImplemented 异常 这已经通过在两台不同的机器上执行相同的代码库得到了
  • 控制 grid.layout 中的内部图形边距

    我正在尝试在网格中绘制多个格子图 为此 我使用以下代码 plot lt xyplot 1 10 1 10 page layout lt grid layout nrow 2 ncol 1 widths unit c 1 null heigh
  • 在自定义适配器的列表视图项中加载不同的图像

    您好 如果我在解释问题时有误 请原谅我 我有一个自定义基本适配器 其中有两个 imageView 和两个 TextView 我使用异步任务从 URL 设置图像 它会设置图像 但会自动再次更改图像 下面是适配器的代码 public class
  • 使用声明性命令创建 Kubernetes Pod 时出现 ErrImagePull:401 Unauthorized

    我正在开展一个实验室 展示如何在 IBM Cloud 上设置 Kubernetes 和 CLI 我有 Kubernetes 集群设置和容器注册表 我在 CLI 上登录到 IBM Cloud 和 Container Registry 镜像已创
  • 加密密钥未经授权用于持续部署 Travis → Heroku

    我正在尝试配置币管家 http www coinsmanager com 以便阿尔法版本 http alpha coinsmanager com Travis 持续集成后自动部署 这是我们的 travis yml file language
  • 如何获取颤振中列表视图滚动的索引号?

    我在 flutter 应用程序中使用下面的列表视图生成器代码 我需要在滚动时获取列表中项目的索引 就像函数一样onPageChanged 使用时PageView Builder return ListView builder itemCou
  • 在 MVC 控制器中处理 DbContext,哪种方式“更好”?

    在 MVC 5 中 脚手架代码将类似于 public class MyController Controller private MyContext db new MyContext protected override void Disp
  • 使用fences清理命令缓冲区并同时同步交换链图像

    假设我有一个交换链 其中包括n图像和我允许k 飞行中的帧 我确保之间的正确同步vkAcquireNextImageKHR vkQueueSubmit and vkQueuePresentKHR通过一组信号量imageAvailableSem
  • 更改 MGTwitterEngine 的委托

    我已经使用 MGTwitterEngine 的扩展类通过 xAuth 设置并成功登录 我的问题是如果我想将其传递给另一个视图控制器 我如何更改委托类 因为它是某种弱引用 interface MGTwitterEngine NSObject
  • iOS swift 流媒体应用程序无法在后台模式下播放音乐

    我的应用程序运行良好 但一旦屏幕安全打开或在 iPhone 上执行其他操作 流就会停止 我激活了后台模式 正在播放音频 但这没有帮助 这是我的 ViewController swift import UIKit import MediaPl
  • HTML 5 是否需要 ``

    当编写 html 5 文档类型时 您是否应该包含就像您之前使用 HTML4 doctype 时所做的那样 还是应该使用不同的 xhtml HTML5 不需要使用xmlns属性 因为它是 XHTML 特有的 这意味着甚至 HTML 4 也不使
  • PHP - 魔术引号 gpc 和 stripslashes 问题

    好的 我的托管公司有magic quotes gpc turned ON我使用以下代码编写了我的 PHP 脚本stripslashes 在此准备过程中 但现在托管公司表示将转向magic quotes gpc关闭 我想知道现在我的数据会发生
  • 类型同义词对类型类的实例有什么影响? GHC 中的 TypeSynonymInstances 编译指示有何作用?

    我正在阅读现实世界哈斯克尔第151页 我盯着下面这段话看了一个多小时 回想一下 字符串是以下的同义词 Char 它又是类型 a 其中 Char 替换为类型 参数a 根据 Haskell 98 的 规则 我们不允许提供 在以下情况下用类型代替
  • 用 .NET 编写的服务可以自行终止吗?

    我有一个用 C 编写的服务应用程序 在某些情况下 我希望它自行终止 这会在服务运行一段时间后发生 因此在 OnStart 事件中不会发生这种情况 到目前为止我读到的所有内容都表明终止服务的唯一安全方法是通过服务控制管理器 我的服务作为本地服
  • 单元测试实体框架

    我刚刚开始使用 Entity Framework v4 和 Linq 我有一个实体数据模型 它是从数据库生成的 然后 我实现了存储库类 以便实现我的实体的业务逻辑 它们包含用于与实体 数据库交互的 LINQ 查询 在不访问数据库的情况下对我
  • delphi 对象赋值与:=

    有人可以解释一下以下之间的区别 1 newObj TMyObject Create newObj Assign oldObj and 2 newObj oldObj 2 确实newObj and oldObj引用同一个对象 抱歉 如果之前已
  • acts_as_taggable_on 标签添加两次

    我有一个 RoR 应用程序 允许用户标记其集合中的项目 我使用 tag it js Jquery 插件并使用 Ajax 调用在 ItemsController 中添加和删除标签 我的问题是每个标签添加两次 因此当我执行 item tags