Quando si lavora con la proprietà il modello oggetto di tag ottiene i relativi tag un po 'diverso.Senza la proprietà si può ottenere i propri tag in questo modo:
@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
Tuttavia, entrambi questi opperations creano taggins
, la cui tagger_id
e tagger_type
sono nil
.
Per avere questi campi impostati, è necessario utilizzare questo metodo:
@user.tag(@photo, on: :tags, with: 'a tag')
Supponiamo si aggiunge questa linea ai create/update
azioni del vostro PhotosController
:
@user.tag(@photo, on: :tags, with: params[:photo][:tag_list])
Questo creerà due taggings (uno con e uno senza tagger_id/_type
), perché params[:photo][:tag_list]
è già incluso in photo_params
. Quindi, per evitare ciò, non aggiungere la whitelist allo :tag_list
.
Per Rails 3 - rimuovere :tag_list
da attr_accessible
.
Per Rails 4 - rimuovere :tag_list
da params.require(:photo).permit(:tag_list)
.
Alla fine la vostra azione create
potrebbe assomigliare a questo:
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
Si noti inoltre che quando la codifica degli oggetti in questo modo non è possibile utilizzare il solito metodo tag_list
per recuperare i tag di una foto, perché cerca di taggings
, dove tagger_id IS NULL
. Devi usare invece
@photo.tags_from(@user)
Nel caso in cui l'oggetto oggetto di tag belongs_to
un singolo utente è anche possibile utente all_tags_list
.
Sto cercando di ottenere la stessa cosa. Sei arrivato da qualche parte con questo? – tsdbrown
Ho chiesto informazioni su questo su github: http://github.com/mbleigh/acts-as-taggable-on/issues/issue/111/#issue/111 – tsdbrown
Hai mai pensato di avere un modello owner_tags che appartiene a Proprietario e posta? Richiederebbe un po 'più di legwork, ma poi saprai a chi appartengono i tag e in quale post appartengono. Probabilmente dovresti avere attr_accessor: tag_list in modo che le viste del modulo funzionino ancora e poi ottenere il modello per dividerle nel modello owner_tags su create/udpate. – Adam21e