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:
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ę!
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
Co z opisem błędu w konsoli logowania do serwera? Błędy catch w metodzie #works. –
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