2013-08-16 9 views
5

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:

http://bit.ly/179kiqH

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!

risposta

2

Se si utilizza act_as_taggable_on gem è più semplice che in railscast.

Model (Post):

acts_as_taggable_on :works 

View (modulo):

= f.text_field :work_list, "data-pre" => f.object.work_list.sort.collect {|t| {id: t, name: t } }.to_json 

JS:

$ -> 
    $("#post_work_list").tokenInput "/posts/works.json", 
    preventDuplicates: true, 
    animateDropdown: false 
+0

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

+1

E la descrizione dell'errore nella console di accesso al server? Errori di cattura nel metodo #works. –

+0

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

2

pubblicare stupefacenti risposte a qualsiasi domande da questo argomento!

http://bloginius.com/blog/2013/12/31/how-integrate-acts-as-taggable-on-with-jquery-token-input-with-rails-3/

+2

Nota che [le risposte solo per il collegamento sono scoraggiate] (http://meta.stackoverflow.com/tags/link-only-answers/info), le risposte SO dovrebbero essere il punto finale di una ricerca per una soluzione (rispetto a un'altra sosta di riferimenti, che tendono a diventare obsoleti nel tempo). Si prega di considerare l'aggiunta di una sinossi autonoma qui, mantenendo il collegamento come riferimento. – kleopatra

Problemi correlati