【问题标题】:cannot add new tags through jquery.tokeninput无法通过 jquery.tokeninput 添加新标签
【发布时间】:2014-02-05 09:11:37
【问题描述】:

我已经看过无数次 ryan rails-casts 了,但是我在这个问题上停留了几天。主要问题是我无法使用 jquery.tokeninput 或没有 jquery 设置新的标签记录。我很确定这与错误的路线设置有关...提前谢谢您!

#prepopulating 表单工作正常

_form.html.haml

= f.text_field :tag_list, data: {load: @job.tags.map(&:attributes).to_json }

job.js.coffee

jQuery ->
  $('#job_tag_list').tokenInput '/jobs/tags.json',
  theme: 'facebook'
  prePopulate: $('#job_tag_list').data('load')

job.rb

attr_accessible :tag_list


def self.tokens(query)

  tags = ActsAsTaggableOn::Tag.all.where("name LIKE ?", "%#{query}%")
  if tags.empty?
    [{id: "<<<#{query}>>>", name: "Add new skill:  \"#{query}\""}]
  else
    tags
  end
end


def self.tag_list=(arguments)
  return if !arguments.is_a?(Hash)
  list = arguments[:tag_list]
  list.gsub!(/<<<(.+?)>>>/) { ActsAsTaggableOn::Tag.find_or_create_by_name(name: $1).name }
end

jobs_controller.rb

def tags

  @tags  = ActsAsTaggableOn::Tag.where("tags.name LIKE ?", "%#{params[:q]}%")
  respond_to do |format|
    format.json {render :json => @tags.tokens(params[:q])}
  end
end

routes.rb

    resources :jobs do
    member do
      post 'reply'
    end
  end

【问题讨论】:

  • 我没有将 jquery-tokeninput 与 ruby​​ 一起使用的经验,并且设置有些不同 - 但在本机 Javascript 版本中,您需要在此处使用参数 allowFreeTagging:true @ 987654327@ - 也许尝试一下作为潜在的快速修复?
  • 看起来您没有为路径“/jobs/tags.json”定义路由,请在作业资源路由中添加“get 'tags', on: :collection”。跨度>

标签: ruby-on-rails acts-as-taggable-on jquery-tokeninput


【解决方案1】:

act_as_taggable_one 和 jquery.tokeninput 的可行集成如下:

从这里提取文件:https://github.com/loopj/jquery-tokeninput 并放入相应的文件夹:

供应商/资产/javascripts *供应商/资产/样式表*

宝石文件

gem 'acts-as-taggable-on'

应用程序.css

 *= require token-input-facebook

应用程序.js

//= require jquery.tokeninput

application.html.erb

<%= javascript_include_tag :defaults, "jquery.tokeninput" %>

jobs.js.coffee

jQuery ->
  $('#job_tag_list').tokenInput '/jobs/tags.json',
    theme: 'facebook'
    prePopulate: $('#job_tag_list').data('load')
    allowCustomEntry: true

_form.html.haml

= f.text_field :tag_list, data: {load: @job.tags.map{|t| {id: t.name, name: t.name}}.to_json}

jobs_controller.rb

def tags
    @tags  = Job.tokens(params[:q])
    respond_to do |format|
      format.json {render :json => @tags}
    end
  end

job.rb

acts_as_taggable
attr_accessible :tag_list

def self.tokens(query)
    tags = ActsAsTaggableOn::Tag.where("tags.name LIKE ?", "%#{query}%")
    if tags.empty?
      [{id: "#{query}", name: "Add new skill:  \"#{query}\""}]
    else
      tags
    end
  end

routes.rb

 resources :jobs do
    member do
      post 'reply'
    end
      get 'tags', on: :collection
  end

【讨论】:

    【解决方案2】:
    $("#skills").tokenInput("/url",{
            theme: "facebook",
            onResult: function (results) {
                if ( results.length == 0 ){
                  result = new Object();
                  result['id']    = $('#token-input-skills').val();
                  result['name']  = $('#token-input-skills').val();
                  results.push(result);
                }
                return results;
            }
          });
    

    我添加了一个函数,如果没有可用的结果,则使用用户的输入文本填充数组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2023-03-17
      相关资源
      最近更新 更多