Ich versuche, ein tokeninput jquery Feld in einem Formular in meiner App hinzufügen, den Benutzer Status-Updates posten kann. Ich möchte, dass Benutzer Arbeiten (ein separates Modell) an die Statusaktualisierung anhängen können. Ich verwende das Juwel "act_as_taggable_on" und meine Abfrage gibt an, dass der Kontext der Tags "funktioniert". Das Feld lädt jedoch keine Suchergebnisse.Wie jquery tokeninput in Rails benutzen?
Ich habe eigentlich ein zweites tokeninput Feld, das Benutzer-Tags an den Status-Update befestigen können, ähnlich wie diese Website Tags zu diesem Thema Ticket anhängen verwendet. Es funktioniert gut! Ich versuche, diese Funktionalität zu spiegeln, um den Kontext anzugeben, in dem das Arbeitsmodell gesucht wird, und ich kämpfe mit der Implementierung.
Irgendwelche Ideen? Ihre Zeit und Hilfe wäre sehr willkommen! Hier ist der relevante Code:
Post Modell
attr_accessible :content, :tag_list, :work_list
acts_as_taggable_on :tags
acts_as_taggable_on :works
Beitrag Controller (aktualisiert)
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
Form
<%= 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
Routen
get "posts/tags" => "posts#tags", :as => :tags
get "posts/work_list" => "posts#work_list", :as => :work_list
Dank!
EDIT: ich diese Frage aufgeräumt und der gesamte Code aktualisiert. Ich begann auch ein Gespräch auf enginhere.com, die auch einige andere Fehlerbehebungs von anderen Ingenieuren hat:
Fühlen Sie sich frei durch die Fortsetzung der Unterhaltung auf dem oben enginhere.com Gespräch zu helfen und dann die endgültige, offizielle Entsendung Antworte hier auf das Kopfgeld!
Danke nochmal!
Danke für die Antwort! Ich kann diese Arbeit nicht bekommen, aber das hat mich denken: warum nicht nur die für die Arbeiten acts_as_taggable_on Juwel verwenden, wie ich für Tags verwenden bin? Ich habe den Code gespiegelt, den ich für Tags verwende, aber das Arbeitsfeld funktioniert immer noch nicht. Ich komme aber näher!Das Javascript lädt, aber ich bekomme einen 500 Fehler, wenn ich etwas in das Feld eintippe. Aktualisierte Frage. Irgendwelche Ideen? Vielen Dank!!! – winston
Was ist mit Fehlerbeschreibung in der Serverprotokollkonsole? Fange Fehler in der #works-Methode. –
loszulegen "/posts/works.json?q=op" Verarbeitung von Posts # als JSON Parameter funktioniert: { "q" => "op"} Nameerror (nicht initialisierte Konstante ActsAsTaggableOn :: Werk): Completed 500 Interner Server Fehler in 1ms app/controllers/posts_controller.rb: 28: in 'funktioniert ' – winston