【问题标题】:jQuery Tags-Input with Rails4 / Simple_form使用 Rails4 / Simple_form 的 jQuery 标签输入
【发布时间】:2013-09-25 13:18:36
【问题描述】:

我将 Rails 4 与 Simple_form 和 acts_as_taggable 一起使用。

我正在尝试为我的标签 (atcs_as_taggable) 实现 jQuery Tags Input。

Tags_input 的 HTML 是:

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

翻译成Simple_form:

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

我在更改之前输入的标签在编辑/表单中正确显示,但新标签没有保存。

我的 Tags_input 的 JS 很简单:

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

我错过了什么?

【问题讨论】:

  • 你解决了这个问题吗?
  • @rmagnum2002 的回答涵盖了我!

标签: jquery ruby-on-rails ruby-on-rails-4 simple-form jquery-tags-input


【解决方案1】:

对我来说,这个插件不是你能用的最好的。

我会选择

  1. 选择 http://harvesthq.github.io/chosen/ 或
  2. jQuery Tokeninput http://loopj.com/jquery-tokeninput/.

以前更喜欢 2nd,但 Chosen 是一个很棒的插件,现在是我的最爱。

至于在 Rails 中实现它们:

选择

宝石文件

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 令牌输入

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>

models/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

models/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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-08-17
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多