Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在使用acts as taggable gem保存任何标记之前,如何设置标记所有者?_Ruby On Rails_Tags_Rubygems_Acts As Taggable On - Fatal编程技术网

Ruby on rails 在使用acts as taggable gem保存任何标记之前,如何设置标记所有者?

Ruby on rails 在使用acts as taggable gem保存任何标记之前,如何设置标记所有者?,ruby-on-rails,tags,rubygems,acts-as-taggable-on,Ruby On Rails,Tags,Rubygems,Acts As Taggable On,我使用acts作为标记宝石 和jQueryTokenInput插件向我的图像模型添加标记。到目前为止,已创建并添加标记。我遵循了教程。 但是现在,我希望能够在创建标记时将标记的所有权授予当前用户。 在gem的github页面中,我尝试了 @some_user.owned_taggings @some_user.owned_tags 没有令人满意的结果。我继续向tags表添加了一个用户id。是否有一个与在gem上作为标记的行为相关联的标记控制器,我可以通过before_save修改该控制器以设置

我使用acts作为标记宝石 和jQueryTokenInput插件向我的图像模型添加标记。到目前为止,已创建并添加标记。我遵循了教程。 但是现在,我希望能够在创建标记时将标记的所有权授予当前用户。 在gem的github页面中,我尝试了

@some_user.owned_taggings
@some_user.owned_tags
没有令人满意的结果。我继续向tags表添加了一个用户id。是否有一个与在gem上作为标记的行为相关联的标记控制器,我可以通过before_save修改该控制器以设置标记的用户id? 谢谢

一个专用于所有权的工具,它有助于处理模型的细节

但是,我不认为提供的方法是正确的——它们会将所有拥有的标记(即,由任何人拥有)应用于每个owneritem关系。我是这样做的:

DEFAULT_ACTSASTAGGABLEON_TYPE = :tag

module TagToOwner
  extend ActiveSupport::Concern

  private
    def add_owned_tag(item, owner, tags_to_add, options = {})
      own_tag(item, owner, arrayify(tags_to_add), "add", options)
    end

    def remove_owned_tag(item, owner, tags_to_add, options = {})
      own_tag(item, owner, arrayify(tags_to_add), "subtract", options)
    end

    def own_tag(item, owner, tags_to_add, direction = "add", opts)
      tag_type = (options[:tag_type] || DEFAULT_ACTSASTAGGABLEON_TYPE)
      owned_tag_list = item.owner_tags_on(owner, tag_type).map(&:name)

      if direction == "subtract"
        owned_tag_list = owned_tag_list.reject{|n| n.in?(tags_to_add)}
      else
        owned_tag_list.push(*tags_to_add)
      end

      owner.tag(item, with: stringify(owned_tag_list), on: tag_type, skip_save: (options[:skip_save] || true))
    end

    def arrayify(tags_to_add)
      return tags_to_add if tags_to_add.is_a?(Array)
      tags_to_add.split(",")
    end

    def stringify(tag_list)
      tag_list.inject('') { |memo, tag| memo += (tag + ',') }.chomp(",")
    end
end
以及:

class MyModelControllerclass MyModelController < ApplicationController
  include TagToOwner
  # ...
  def create
    @my_model = MyModel.new(my_model_params)
    add_tags
    # ...
  end
  # ...
  def update
    add_tags
    # ...
  end

  private
    def add_tags
      return unless params[:tag_list] && "#{params[:tag_list]}".split(",").any?
      return unless validate_ownership_logic # <- e.g. `current_user`

      add_owned_tag(@my_model, current_user, params[:tag_list])
    end
end