【问题标题】:How do you autocomplete from another model?你如何从另一个模型自动完成?
【发布时间】:2011-09-27 03:28:12
【问题描述】:

我在Auto-complete Associations 上关注了 Railscast,但我被困在自动完成的一半。我没有使用 Prototype 而是使用 Jquery,我不知道如何让自动完成一半工作。是怎么做到的?

这是与 Railscast 相比的自定义:

产品型号:

def location_name
    location.business_name if location
end

def location_name=(business_name)
    self.location = Location.find_by_business_name(business_name) unless business_name.blank?
end

上面创建了一个虚拟属性,其中我为我的产品表单的<%= f.text_field :location_name %> 将我的位置模型:business_name 定义为location_name,因为产品属于一个位置。

编辑:这是使用Jquery Autocomplete Gem,但我愿意接受替代方案。

我的产品:name 很有魅力;

<%= f.autocomplete_field :name, autocomplete_product_name_products_path %>

但如果我为:location_name 放这样的东西就不好了;

<%= f.autocomplete_field :location_name, autocomplete_product_location_name_products_path %>

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 autocomplete jquery-autocomplete


    【解决方案1】:

    很简单,必须添加attr_accessor,这是我在另一个项目中完成的代码:

    <%= form_for(@business_address) do |f| %>
        <%= f.error_messages %>
        <%= f.label :name, "Address" %><br />
        <%= f.autocomplete_field :name, autocomplete_business_address_name_business_addresses_path %>
        <%= f.label :business_name, "Business" %>
        <%= f.autocomplete_field :business_name, autocomplete_business_name_business_addresses_path %>
        <%= f.submit %>
    <% end %
    
    
    class BusinessAddress < ActiveRecord::Base
        attr_accessible :name, :business_name
        belongs_to :business
        attr_accessor :business_name
    
    
        def business_name
            business.name if business
        end
    
        def business_name=(name)
            self.business = Business.find_or_create_by_name(name) unless name.blank?
        end
    end
    
    class BusinessAddressesController
      autocomplete :business, :name, :full => true
      autocomplete :business_address, :name, :full => true
    end
    

    Routes.rb

    resources :business_addresses do
            get :autocomplete_business_name, :on => :collection
            get :autocomplete_business_address_name, :on => :collection
    end
    

    确保在应用程序布局中指定所需的文件,否则由于某些奇怪的原因它不起作用(rails 3.0.9)

    <%= javascript_include_tag "autocomplete-rails", "jquery-ui-1.8.16.custom.min" %>
    

    【讨论】:

      【解决方案2】:

      我不确定,但您是否尝试过使用autocomplete_location_location_name_products_path

      【讨论】:

        【解决方案3】:

        由于我无法让自动完成功能为 Jquery-Autocomplete 工作,我刚开始为我的位置使用 Jquery-TokenInput 插件并将限制设置为仅 1 个令牌,我也从 Railscasts 学到了很多东西。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-25
          • 1970-01-01
          • 2015-07-31
          • 2018-05-18
          • 1970-01-01
          相关资源
          最近更新 更多