1

Ryan Bates の Railscast の助けを借りて、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 %>

きれいにスタイルされたテキスト フィールドが表示されますが、検索しても何も見つからず、どこに行けばよいかわかりません。何か案は?

4

1 に答える 1

0

私はこれを理解しました!まず、フォームから「data: {load: Skill.all}」を削除しました。これは、データベース全体ではなく、thinking_sphinx で機能するようにしたかったためです。次に、ここにキーがありました。coffeescript でpropertyToSearchqueryParamを指定しました。

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

そして出来上がり!それは、私の自己言及的連想と関係があるというよりは、thinking_sphinx の問題であることが判明しました。

propertyToSearch で title 属性を指定することは、各スキルを表す属性を決定するだけであり、thinking_sphinx がそのインデックスから他の属性を使用することを妨げないことに注意することが重要です。

ただし、thinging_sphinx はデフォルトで単語全体の検索のみを行うため、Facebook の入力フィールドとまったく同じようには機能しません。つまり、「ボクシング」というスキルを探していて、「ボックス」または「ボックスイン」と入力しても、何も得られません。最後に完全な単語 boxing "boxing" を入力したときにのみ、スキルがリストに返されます。接頭辞をインデックス化するように thinking_sphinx を構成することは可能です。これにより、Facebook のように部分的な単語から結果が返されます。めちゃくちゃ速い。Facebook が 5000 人の友達を持っている人は誰もいないという事実を別として、5000 人の友達を全員に制限している理由の重要な部分はおそらくこれです。

于 2012-12-21T20:48:24.027 に答える