Les balises persistent pendant:Comment rendre les balises persistantes lors de la mise à jour?
def update
if @goal.update(goal_params)
respond_modal_with @goal, location: root_path
else
render action: 'edit'
end
end
mais quand je mets à jour l'objectif via:
def mark_accomplished
@goal.update(accomplished: true)
respond_to do |format|
format.html
format.js { render :nothing => true }
end
end
Les balises pour cet objectif disparaît lorsqu'un utilisateur clique sur le bouton mark_accomplished
:
<%= link_to 'Accomplished', mark_accomplished_path(goal), remote: true, method: 'put', %>
L'itinéraire:
get '/goal_signup/', to: 'goals#goal_signup', as: 'goal_signup'
Il a quelque chose à voir avec les étiquettes (gem 'acts-as-taggable-on'
) parce que ce problème se produit dans des situations similaires avec mes habitudes MVC. J'utilise des objectifs comme exemple principal ici, mais laissez-moi savoir si vous voulez que les habitudes fournissent aussi plus de contexte.
goal.rb
class Goal < ActiveRecord::Base
scope :publish, ->{ where(:conceal => false) }
belongs_to :user
acts_as_taggable
scope :accomplished, -> { where(accomplished: true) }
scope :unaccomplished, -> { where(accomplished: nil) }
before_save :set_tag_owner
def set_tag_owner
# Set the owner of some tags based on the current tag_list
set_owner_tag_list_on(self.user, :tags, self.tag_list)
# Clear the list so we don't get duplicate taggings
self.tag_list = nil
end
end
TagsController
class TagsController < ApplicationController
def index
@tags = ActsAsTaggableOn::Tag.most_used(20)
# The tags for all users and habits.
@special_tags = ActsAsTaggableOn::Tag.includes(:taggings)
.where('taggings.taggable_type' => ['Habit','User','Valuation','Goal'])
.most_used(10)
# to get tags where the current user is the tagger
@user_tags = current_user.owned_tags
end
def show
@tag = ActsAsTaggableOn::Tag.find(params[:id])
end
end
db
create_table "taggings", force: true do |t|
t.integer "tag_id"
t.integer "taggable_id"
t.string "taggable_type"
t.integer "tagger_id"
t.string "tagger_type"
t.string "context", limit: 128
t.datetime "created_at"
end
add_index "taggings", ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true, using: :btree
add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context", using: :btree
create_table "tags", force: true do |t|
t.string "name"
t.integer "taggings_count", default: 0
end
add_index "tags", ["name"], name: "index_tags_on_name", unique: true, using: :btree
Écrire des rappels qui dépendent d'une autre classe, le modèle n'est pas une bonne pratique. Vous pouvez donc affecter 'self.tag_list = nil' dans le contrôleur ou vous pouvez écrire une classe de service pour mettre à jour les objectifs et y écrire. –
Vous ne l'avez probablement pas appelé sur l'objet objectif, essayez @ goal.tag_list = nil avant la mise à jour. Ne sois pas désolé de t'avoir fait une erreur humaine. –
@ AnthonyGalli.com Je ne suis pas en mesure d'ouvrir votre question. Vous l'avez probablement résolu vous-même et supprimé la question. –