6

ユーザーがステータスの更新を投稿できるように、アプリのフォームに tokeninput jquery フィールドを追加しようとしています。ユーザーが近況更新に作品(別モデル)を添付できるようにしてほしい。act_as_taggable_on gem を使用しており、クエリでタグ コンテキストが「機能する」と指定されています。ただし、フィールドは検索結果をロードしません。

実際には、このウェブサイトがタグを使用してこの課題チケットに添付するのと同じように、ユーザーがステータス更新にタグを添付できるようにする 2 番目の tokeninput フィールドがあります。それはうまくいきます!その機能をミラーリングして、コンテキストを指定して作品モデルを検索しようとしていますが、実装に苦労しています。

何か案は?お時間とご支援をいただければ幸いです。関連するコードは次のとおりです。

ポストモデル

attr_accessible :content, :tag_list, :work_list

acts_as_taggable_on :tags
acts_as_taggable_on :works

ポストコントローラー (更新)

def work_list
 query = params[:q]  
 @work_list = ActsAsTaggableOn::Tag.includes(:taggings).where("taggings.context = 'works'").where("tags.name ILIKE ?", "%#{params[:q].downcase.to_s}%").all
 @work_list = @work_list.select { |v| v.name =~ /#{query}/i }
  respond_to do |format|
    format.json { render :json => @work_list.map{|w| {:id => w.name, :name => w.name }}}
  end
end


def tags 
    query = params[:q]
    if query[-1,1] == " "
      query = query.gsub(" ", "")
      ActsAsTaggableOn::Tag.find_or_create_by_name(query)
    end

    #Do the search in memory for better performance

    @tags = ActsAsTaggableOn::Tag.all
    @tags = @tags.select { |v| v.name =~ /#{query}/i }
    respond_to do |format|
      format.json{ render :json => @tags.map{|t| {:id => t.name, :name => t.name }}}
    end
  end

<%= f.text_field :tag_list, :id => "post_work_list",  "data-pre" => @post.work_list.map(&:attributes).to_json %>

JavaScript

$ ->
  $("#post_tags").tokenInput "/posts/tags.json",
    prePopulate: $("#post_tags").data("pre")
    preventDuplicates: true
    noResultsText: "No results, press space key to create a new tag."
    animateDropdown: false

$ ->
  $("#post_work_list").tokenInput "/posts/work_list.json",
    prePopulate: $("#post_work_list").data("pre")
    preventDuplicates: true
    noResultsText: "No results"
    animateDropdown: false

ルート

get "posts/tags" => "posts#tags", :as => :tags
get "posts/work_list" => "posts#work_list", :as => :work_list

ありがとう!

編集:この質問をクリーンアップし、すべてのコードを更新しました。また、enginhere.com で会話を始めました。これには、他のエンジニアからの他のトラブルシューティングもあります。

http://bit.ly/179kiqH

上記の enginhere.com の会話で会話を続け、報奨金の最終的な公式回答をここに投稿することで、お気軽にご協力ください!

再度、感謝します!

4

2 に答える 2

2

act_as_tggable_on gem を使用している場合は、Railscast よりも簡単な方法です。

モデル (役職):

acts_as_taggable_on :works

ビュー (フォーム):

= f.text_field :work_list, "data-pre" => f.object.work_list.sort.collect {|t| {id: t, name: t } }.to_json

JS:

$ ->
  $("#post_work_list").tokenInput "/posts/works.json",
    preventDuplicates: true,
    animateDropdown: false
于 2013-08-16T20:36:06.867 に答える