所有権を扱う場合、タグ付け可能なモデルは少し異なるタグを取得します。所有権がなければ、次のようにタグを取得できます。
@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
ただし、これらの操作は両方とも create taggins
、 whichtagger_id
およびtagger_type
arenil
です。
これらのフィールドを設定するには、次のメソッドを使用する必要があります。
@user.tag(@photo, on: :tags, with: 'a tag')
次の行を のcreate/update
アクションに追加するとしますPhotosController
。
@user.tag(@photo, on: :tags, with: params[:photo][:tag_list])
はすでに に含まれているtagger_id/_type
ため、これにより 2 つのタグ付けが作成されます (1 つは あり、もう 1 つはなし) 。したがって、それを回避するには、ホワイトリストに登録しないでください。params[:photo][:tag_list]
photo_params
:tag_list
Rails 3 の場合 - から削除:tag_list
しattr_accessible
ます。
Rails 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)
タグ付け可能なオブジェクトbelongs_to
が 1 人のユーザーの場合は、 user も使用できますall_tags_list
。