/ / jQuery Tags-Input avec Rails4 / Simple_form - jquery, ruby-on-rails, ruby-on-rails-4, forme simple, jquery-tags-input

jQuery Tags-Input avec Rails4 / Simple_form - jquery, ruby-on-rails, ruby-on-rails-4, forme simple, jquery-tags-input

J'utilise Rails 4 avec Forme simple et actes_as_taggable.

J'essaie de mettre en œuvre le jQuery Tags Input pour mes balises (atcs_as_taggable).

Le HTML pour le Tags_input est:

   <input name="tagsinput" class="tagsinput" value="School,Teacher,Colleague" />

qui se traduit par Forme simple:

   <%= f.input :tag_list, input_html: { class: "tagsinput "} %>

Les balises que j’ai saisies avant le changement sont correctement affichées dans l’édition / formulaire, mais les nouvelles balises ne sont pas enregistrées.

Le JS pour mon Tags_input est simple:

   $(".tagsinput").tagsInput({
width: "300px"
});

Qu'est-ce que je rate ?

Réponses:

13 pour la réponse № 1

Quant à moi, ce plugin n'est pas le meilleur que vous puissiez utiliser.

J'irais avec

  1. Choisi http://harvesthq.github.io/chosen/ ou
  2. jQuery Tokeninput http://loopj.com/jquery-tokeninput/.

J'avais l'habitude d'aimer la deuxième plus, mais Chosen est un excellent plugin qui est mon préféré à présent.

Quant à les implémenter dans des rails:

Choisi

Gemfile

group :assets do
gem "chosen-rails"
end

app / assets / javascripts / application.js

//= require chosen-jquery

app / assets / stylesheets / application.css

*= require chosen

app / assets / javascripts / questions.js.coffee

jQuery ->
$("#question_tags_ids").chosen()

questions / _form.html.erb

<div class="field">
<%= f.label :tag_ids, "Tags" %><br />
<%= f.collection_select :tag_ids, Tag.order(:name), :id, :name, {}, {multiple: true} %>
</div>

jQuery Tokeninput

app / assets / javascripts / application.js

//= require jquery.tokeninput

app / assets / stylesheets / application.css

*= require token-input-facebook

app / assets / javascripts / questions.js.coffee

jQuery ->
$("#question_tag_tokens").tokenInput "/tags.json"
theme: "facebook"
prePopulate: $("#question_tag_tokens").data("load")

questions / _form.html.erb

<div class="field">
<%= f.label :tag_tokens, "Tags" %><br />
<%= f.text_field :tag_tokens, data: {load: @question.tags} %>
</div>

modèles / question.rb

attr_accessible :name, :tag_tokens
attr_reader :tag_tokens

def tag_tokens=(tokens)
self.tag_ids = Tag.ids_from_tokens(tokens)
end

tags_controller.rb

def index
@tags = Tag.order(:name)
respond_to do |format|
format.html
format.json { render json: @tags.tokens(params[:q]) }
end
end

modèles / tag.rb

def self.tokens(query)
tags = where("name like ?", "%#{query}%")
if tags.empty?
[{id: "<<<#{query}>>>", name: "New: "#{query}""}]
else
tags
end
end

def self.ids_from_tokens(tokens)
tokens.gsub!(/<<<(.+?)>>>/) { create!(name: $1).id }
tokens.split(",")
end