При работе с собственностью taggable модель получает свои метки немного иначе.Без права собственности он может получить свои тэги так:
@photo.tag_list << 'a tag' # adds a tag to the existing list
@photo.tag_list = 'a tag' # sets 'a tag' to be the tag of the @post
Однако оба этих opperations создать taggins
, чьи tagger_id
и tagger_type
являются nil
.
Для того, чтобы иметь установить эти поля, вы должны использовать этот метод:
@user.tag(@photo, on: :tags, with: 'a tag')
Предположим, вы добавить эту строку в create/update
действия Вашего PhotosController
:
@user.tag(@photo, on: :tags, with: params[:photo][:tag_list])
Это создаст два (один с одним и без tagger_id/_type
), потому что params[:photo][:tag_list]
уже включен в photo_params
. Поэтому, чтобы этого избежать, просто не белите список :tag_list
.
Для Rails 3 - удалить :tag_list
из attr_accessible
.
Для рельсов 4 - удалить :tag_list
с params.require(:photo).permit(:tag_list)
.
В конце вашей create
действие может выглядеть следующим образом:
def create
@photo = Photo.new(photo_params) # at this point @photo will not have any tags, because :tag_list is not whitelisted
current_user.tag(@photo, on: :tags, with: params[:photo][:tag_list])
if @photo.save
redirect_to @photo
else
render :new
end
end
Также обратите внимание, что при мечения объектов таким образом, вы не можете использовать обычный tag_list
метод для получения тегов фотографии, потому что он ищет taggings
, где tagger_id IS NULL
. Вы должны использовать вместо
@photo.tags_from(@user)
В случае, если ваш taggable объект belongs_to
одного пользователя вы можете также пользователь all_tags_list
.
Я пытаюсь достичь того же. Вы с этим справились? – tsdbrown
Я спросил об этом на github: http://github.com/mbleigh/acts-as-taggable-on/issues/issue/111/#issue/111 – tsdbrown
Вы задумывались о наличии модели owner_tags, которая принадлежит Владелец и почта? Для этого потребуется немного больше работы, но тогда вы узнаете, кто владеет тегами, а также какой почтой они принадлежат. Вероятно, вам понадобится attr_accessor: tag_list, чтобы представления форм все еще работали, а затем выталкивали модель в модель owner_tags для создания/udpate. – Adam21e