2016-08-16 2 views
2

저는 acts-as-taggable gem https://github.com/mbleigh/acts-as-taggable-on 과 jQueryTokenInput plugin을 사용하여 이미지 모델에 태그를 추가하고 있습니다. 지금까지 태그가 생성되어 추가되었습니다. 나는 튜토리얼 http://bloginius.com/blog/2013/12/31/how-integrate-acts-as-taggable-on-with-jquery-token-input-with-rails-3/을 따라 갔다. 그러나 태그를 만들 때 current_user에 태그의 소유권을 부여 할 수 있기를 원합니다. 보석의 GitHub의 페이지 으로는, 나는 만족스러운 결과를태그가 acts-as-taggable gem과 함께 저장되기 전에 태그 소유자를 어떻게 설정합니까?

@some_user.owned_taggings 
@some_user.owned_tags 

노력했다. 나는 진행하여 user_id를 tags 테이블에 추가했다. 태그에 대한 user_id를 설정하기 위해 before_save로 수정할 수있는 acts-as-taggable-on 보석과 관련된 tagsController가 있습니까? 감사합니다.

답변

0

section of the acts-as-taggable-on README 소유권 전용이며 모델의 세부 사항을 다루는 데 유용합니다.

그러나 제공된 메소드가 정확하다고는 생각하지 않습니다. 모든 소유 태그 (모든 사람이 소유 한 태그)를 각 소유자 <> 항목 관계에 적용합니다. 여기에 내가 그것을 할 거라고 방법은 다음과 같습니다

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

주 나는 그들의 README를 해결하는 행위로서의 taggable-에 대한 an issuea corresponding pull request을 제기했다.