Ruby on rails 3.2 在Rails 3中使用带有自引用关联的jQuery Tokeninput

Ruby on rails 3.2 在Rails 3中使用带有自引用关联的jQuery Tokeninput,ruby-on-rails-3.2,jquery-tokeninput,Ruby On Rails 3.2,Jquery Tokeninput,我正试图在您使用Tokeninput键入表单时,在来自的帮助下设置搜索。不幸的是,我很难通过自我参照关联来理解它 在我的模型中: class Skill < ActiveRecord::Base attr_accessible :skill_relationship_attributes, :prereq_tokens attr_reader :prereq_tokens has_many :skill_relationships has_many :prereqs, :

我正试图在您使用Tokeninput键入表单时,在来自的帮助下设置搜索。不幸的是,我很难通过自我参照关联来理解它

在我的模型中:

class Skill < ActiveRecord::Base
  attr_accessible :skill_relationship_attributes, :prereq_tokens
  attr_reader :prereq_tokens

  has_many :skill_relationships
  has_many :prereqs, :through => :skill_relationships
  has_many :inverse_skill_relationships, :class_name => 'SkillRelationship', :foreign_key => "prereq_id"
  has_many :inverse_prereqs, :through => :inverse_skill_relationships, :source => :skill

  accepts_nested_attributes_for :skill_relationships, :allow_destroy => true

  def prereq_tokens=(ids)
    self.prereq_ids = ids.split(",")
  end
end

class SkillRelationship < ActiveRecord::Base
  attr_accessible :skill_id, :prereq_id, :skill_attributes, :prereq_attributes

  belongs_to :skill
  belongs_to :prereq, :class_name => 'Skill'
end
我无力地拼凑了一张表格:

<%= form_for skill do |f| %> 
  <%= f.label :prereq_tokens, "Prerequisites" %><br/>
  <%= f.text_field :prereq_tokens, data: {load: Skill.all} %>       
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我确实得到了一个样式很好的文本字段,但它在搜索时找不到任何内容,我也不确定从这里开始该怎么做。有什么想法吗?

我想出来了!首先,我从表单中删除了数据:{load:Skill.all},因为我想让它通过thinking_sphinx而不是我的整个数据库工作。然后-这里是键-我在我的coffeescript中指定了propertyToSearch和queryParam:

jQuery ->
  $('#skill_prereq_tokens').tokenInput '/skills.json'
    theme: 'facebook'
    propertyToSearch: 'title' // :title is the attribute in my Skill model that I want to show up in the list
    queryParam: 'search' // :search is the parameter that gets passed to thinking_sphinx
瞧!事实证明,这更像是一个斯芬克斯思考的问题,而不是我的自我参照关联

需要注意的是,使用propertyToSearch指定title属性只会确定哪个属性可以表示每个技能,而不会阻止thinking_sphinx使用其索引中的其他属性

不过,它的工作方式与Facebook的输入字段并不完全相同,因为默认情况下,thinking_sphinx只进行全词搜索。换句话说,如果我在寻找一种叫做拳击的技能,我输入box,甚至boxin,我将一无所获。只有当我最终输入完整的单词拳击时,技能才会返回列表中。可以将thinking_sphinx配置为索引前缀,这样它就可以返回部分单词的结果,就像Facebook一样-但是如果你要索引一个大型数据库,你可能不想这样做,因为你的索引会爆炸得很快。除了没有人有5000个朋友之外,这可能是Facebook将每个人的好友数限制在5000个的重要原因之一