2012-02-25 24 views
1

我有一個標籤型號:rails3-jquery-autocomplete在Rails 3.2.1中不起作用?

模式
class Post < ActiveRecord::Base 
    has_and_belongs_to_many :tags 

    def tag!(tags) 
    tags = tags.split(" ").map do |tag| 
     Tag.find_or_create_by_name(tag) 
    end 
    self.tags << tags 
    end 
end 

class Tag < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
end 

部分 posts/_form
create_table "tags", :force => true do |t| 
    t.string "name" 
    end 

<div class="field"> 
    <%= f.label :tags %> 
    <%= text_field_tag :tags, params[:tags] %> 
    </div> 

我的git倉庫跟着instructions的寶石:

控制器/ posts_controller.rb:

class PostsController < ApplicationController 
    before_filter :authenticate_user!, :except => [:show, :index] 
    autocomplete :tags, :name 

(等)

routes.rb中:

resources :posts do 
    get :autocomplete_tags_name, :on => :collection 
end 

所有的JavaScript文件有:

 <script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script> 
<script src="/assets/autocomplete-rails.js?body=1" type="text/javascript"></script> 

但絕對沒有任何反應(我通過控制檯添加標籤來測試)。

任何建議,使這個寶石的工作? (我on Rails的3.2.1)

+0

您是否找到了解決方案? – 2012-07-31 16:31:01

+0

您是否曾經讓自動填充搜索工作?如果是,請分享您的代碼。我遇到了類似的麻煩。 – takaloosingh 2014-02-26 21:49:53

回答

2

首先,你可以整理你的多元化(反正可能會奏效,但可以更容易地比較指令)

控制器/ posts_controller.rb:

autocomplete :tag, :name 

的routes.rb

resources :posts do 
    get :autocomplete_tag_name, :on => :collection 
end 

然後,你需要將您的text_field_tag更改爲一個autocomplete_field,就像它在說明中查看的那樣。

從說明:

form_for @product do |f| 
    f.autocomplete_field :brand_name, autocomplete_brand_name_products_path 
end 

我建議你使用Rails的形式幫助的form_for。在你的情況,你正在使用的部分地方會是這個樣子:

的意見/職位/ new.html.erb(或任何你叫從部分):

form_for(:product, :url => {:action => 'create'}) do |f| # I've found that @product doesn't work on new creations and therefor I use :product 
    render(:partial => "form", :locals => {:f => f}) 
    f.submit 
end 

views/posts/_form.html.erb

<div class="fields"> 
    f.label :name, "Tag" 
    f.autocomplete_field :tag_name, autocomplete_tag_name_products_path 
</div>