Sto provando ad aggiungere un campo jQuery tokeninput in un modulo nella mia app che consente agli utenti di pubblicare aggiornamenti di stato. Voglio che gli utenti siano in grado di allegare lavori (un modello separato) all'aggiornamento di stato. Sto usando la gemma act_as_taggable_on e la mia query specifica il contesto dei tag "funziona". Tuttavia, il campo non caricherà alcun risultato di ricerca.Come utilizzare jQuery tokeninput in Rails?
In realtà ho un secondo campo tokeninput che consente agli utenti di allegare tag all'aggiornamento di stato, proprio come questo sito Web utilizza i tag da allegare a questo ticket di emissione. Funziona bene! Sto cercando di rispecchiare tale funzionalità per specificare il contesto in cui cercare il modello di lavoro e sto lottando con l'implementazione.
Qualche idea? Il tuo tempo e assistenza saranno molto apprezzati! Ecco il codice rilevante:
messaggio modello
attr_accessible :content, :tag_list, :work_list
acts_as_taggable_on :tags
acts_as_taggable_on :works
regolatore Messaggio (aggiornato)
def work_list
query = params[:q]
@work_list = ActsAsTaggableOn::Tag.includes(:taggings).where("taggings.context = 'works'").where("tags.name ILIKE ?", "%#{params[:q].downcase.to_s}%").all
@work_list = @work_list.select { |v| v.name =~ /#{query}/i }
respond_to do |format|
format.json { render :json => @work_list.map{|w| {:id => w.name, :name => w.name }}}
end
end
def tags
query = params[:q]
if query[-1,1] == " "
query = query.gsub(" ", "")
ActsAsTaggableOn::Tag.find_or_create_by_name(query)
end
#Do the search in memory for better performance
@tags = ActsAsTaggableOn::Tag.all
@tags = @tags.select { |v| v.name =~ /#{query}/i }
respond_to do |format|
format.json{ render :json => @tags.map{|t| {:id => t.name, :name => t.name }}}
end
end
forma
<%= f.text_field :tag_list, :id => "post_work_list", "data-pre" => @post.work_list.map(&:attributes).to_json %>
javascript
$ ->
$("#post_tags").tokenInput "/posts/tags.json",
prePopulate: $("#post_tags").data("pre")
preventDuplicates: true
noResultsText: "No results, press space key to create a new tag."
animateDropdown: false
$ ->
$("#post_work_list").tokenInput "/posts/work_list.json",
prePopulate: $("#post_work_list").data("pre")
preventDuplicates: true
noResultsText: "No results"
animateDropdown: false
percorsi
get "posts/tags" => "posts#tags", :as => :tags
get "posts/work_list" => "posts#work_list", :as => :work_list
Grazie!
MODIFICA: ho ripulito questa domanda e ho aggiornato tutto il codice. Ho anche iniziato una conversazione su enginhere.com che ha anche qualche altro la risoluzione dei problemi da altri ingegneri:
Sentitevi liberi di contribuire continuando la conversazione sulla conversazione enginhere.com sopra e poi la pubblicazione della finale, ufficiale rispondi qui per la taglia!
Grazie ancora!
Grazie per la risposta! Non riuscivo a farlo funzionare, ma questo mi ha fatto riflettere: perché non usare solo la gemma act_as_taggable_on per i lavori come sto usando per i tag? Ho rispecchiato il codice che sto usando per i tag, ma il campo di lavoro non funzionerà ancora. Mi sto avvicinando però!Il javascript viene caricato ma ottengo un errore di 500 quando digito qualcosa sul campo. Domanda aggiornata Qualche idea? Grazie!!! – winston
E la descrizione dell'errore nella console di accesso al server? Errori di cattura nel metodo #works. –
introduttiva GET "/posts/works.json?q=op" Processing da PostsController # funziona come JSON Parametri: { "q" => "op"} NameError (non inizializzato costante ActsAsTaggableOn :: Work): completato 500 Errore interno del server in 1 ms app/controller/posts_controller.rb: 28: in 'works ' – winston