2013-08-16 6 views
5

Próbuję dodać pole jQuery tokeninput w formularzu w mojej aplikacji, który pozwala użytkownikom publikować aktualizacje statusu. Chcę, aby użytkownicy mogli dołączać prace (osobny model) do aktualizacji statusu. Używam gem act_as_taggable_on, a moje zapytanie określa kontekst znaczników "działa". Jednak pole nie załaduje żadnych wyników wyszukiwania.Jak korzystać z tokenu jquery w Railsach?

Faktycznie mam drugie pole danych tokeninput, które umożliwia użytkownikom dołączanie znaczników do aktualizacji statusu, podobnie jak ta witryna używa znaczników do dołączenia do tego zgłoszenia problemu. To działa dobrze! Próbuję odzwierciedlić tę funkcjonalność, aby określić kontekst do przeszukiwania modelu pracy i zmagam się z implementacją.

Wszelkie pomysły? Twój czas i pomoc będą mile widziane! Oto odpowiedni kod:

po modelu

attr_accessible :content, :tag_list, :work_list 

acts_as_taggable_on :tags 
acts_as_taggable_on :works 

kontroler post (aktualizacja)

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 

trasy

get "posts/tags" => "posts#tags", :as => :tags 
get "posts/work_list" => "posts#work_list", :as => :work_list 

Dzięki!

EDYCJA: Oczyściłem to pytanie i zaktualizowałem cały kod. Zacząłem również rozmowy na enginhere.com który ma także kilka innych rozwiązywanie problemów z innymi inżynierami:

http://bit.ly/179kiqH

krępuj się pomóc poprzez dalsze rozmowy na powyższym enginhere.com rozmowy, a następnie opublikowania ostatecznej, urzędnika odpowiedz tutaj, aby otrzymać nagrodę!

Jeszcze raz dziękuję!

Odpowiedz

2

Jeśli używasz klejnoty acts_as_taggable_on, jest to łatwiejszy sposób niż w railscast.

modelu (Post):

acts_as_taggable_on :works 

View (forma):

= 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

Dzięki za odpowiedź! Nie mogłem tego uruchomić, ale to mnie zastanowiło: dlaczego po prostu nie użyć klejnotu acts_as_taggable_on do prac takich jak w przypadku tagów? Odzwierciedlałem kod, którego używam do tagów, ale pole pracy nadal nie działa. Już się zbliżam!JavaScript ładuje się, ale pojawia się błąd 500, gdy wpisuję cokolwiek w polu. Zaktualizowane pytanie. Jakieś pomysły? Dzięki!!! – winston

+1

Co z opisem błędu w konsoli logowania do serwera? Błędy catch w metodzie #works. –

+0

Started "GET" /posts/works.json?q=op przetwarzanie przez PostsController # działa jako JSON Parametry: { "Q" => "OP"} NameError (niezainicjowany stała ActsAsTaggableOn :: skrawania): Zakończono 500 Wewnętrzny błąd serwera w 1ms app/controllers/posts_controller.rb: 28: in 'works ' – winston

2
+2

Należy pamiętać, że [odradzane są tylko odpowiedzi z linkami] (http://meta.stackoverflow.com/tags/link-only-answers/info), odpowiedzi w formacie SO powinny być punktem końcowym wyszukiwania rozwiązania (w porównaniu z innym punktem odniesienia, który z czasem ulega starzeniu). Proszę rozważyć dodanie samodzielnego streszczenia tutaj, zachowując odnośnik jako odniesienie. – kleopatra

Powiązane problemy