2014-02-05 68 views
0

我曾多次观看过ryan rails-casts,但我在这个问题上坚持了几天。主要的问题是我不能用jquery.tokeninput或jquery设置新的标签记录。我很确定它与错误的路由设置有关......提前谢谢!无法通过jquery.tokeninput添加新标签

#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 
+0

我没有使用jQuery的tokeninput红宝石经验的用户输入文本的阵列功能,并且设置了有点不同 - 但在原生Javascript版本中,您需要在这里的job.js.coffee中使用参数'allowFreeTagging:true' - 也许试试它作为一个潜在的快速修复? – Chris

+0

看起来好像没有为路径“/jobs/tags.json”定义的路由,在作业资源路由内添加了“get'标签”,在:: collection上。 – Dipil

回答

1

act_as_taggable_one和jquery.tokeninput的可行的整合提供如下:

解压文件从这里:https://github.com/loopj/jquery-tokeninput和投入的相应文件夹:

vendor/assets/javascripts * vendor/assets /样式 *

的Gemfile

gem 'acts-as-taggable-on' 

application.css

*= require token-input-facebook 

的application.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 

路线。RB

resources :jobs do 
    member do 
     post 'reply' 
    end 
     get 'tags', on: :collection 
    end 
0
$("#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; 
     } 
     }); 

我补充说,填充用,如果没有可用的结果