Ruby on rails 在使用acts as taggable gem保存任何标记之前,如何设置标记所有者?
我使用acts作为标记宝石 和jQueryTokenInput插件向我的图像模型添加标记。到目前为止,已创建并添加标记。我遵循了教程。 但是现在,我希望能够在创建标记时将标记的所有权授予当前用户。 在gem的github页面中,我尝试了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修改该控制器以设置
@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