2015-06-14 17 views
0

我試圖使用自動完成以下Rails的寶石https://github.com/maxivak/bootstrap3_autocomplete_input提供/快速尋址功能,加上https://github.com/plataformatec/simple_form同時使用bootstrap3_autocomplete_input和關聯

一切如何正確地顯示在編輯表格值的情況下,我選擇工作正常新形式的「新」動作。我可以通過自動完成功能在輸入字段中選擇值。問題是如果我選擇「編輯」操作來編輯已經存在的記錄。在這種情況下,字段不顯示正確的值(預先填寫表格),但它顯示的內容如下:#<Airport:0x007f98b478b7a8>

即使在「顯示」操作中,我也可以看到顯示的值正確。

我試圖用f.association改變f.input,就像我在開始實現自動完成之前所做的那樣,但這沒有幫助。

Cargo模型中的記錄存儲了正確的airports_id引用,我在rails控制檯中手動檢查了這一點。

問題是我怎樣才能得到正確的機場價值預填充的形式,以防我選擇「編輯」行動,而不是某種參考,我得到了。

的Rails 4.1.7

我的代碼是:

貨物型號:

class Cargo < ActiveRecord::Base 
    belongs_to :airport 
... 

貨物視圖:

... 
<%= f.input :airport, :as => :autocomplete, :source_query => autocomplete_airport_city_airports_url %> 
... 

機場模型:

class Airport < ActiveRecord::Base 
    has_many :cargos, :dependent => :destroy 
    attr_accessible :iata_code, :name, :city 
    validates :iata_code, :name, :city, presence: true 
    validates :iata_code, :uniqueness => { :scope => :name } 
    validates :iata_code, length: { is: 3 }, format: { with: /\A[a-zA-Z\d\s]*\z/ } 
    validates :name, :city, length: { minimum: 2, maximum: 128 } 

    def full_airport_name 
    "#{city}/#{iata_code}" 
    end 
end 

機場控制器

class AirportsController < ApplicationController 
    autocomplete :airport, :city, { :display_value => 'full_airport_name', :full_model=>true } 
... 

路線:

resources :airports do 
    get :autocomplete_airport_city, :on => :collection 
end 

回答

2

其實我發現這個問題。首先我重構了Airports model,刪除了所有列,但是刪除了name,並重新命名了名稱列,其數據從分開的字符串IATA code/City連接起來。在此之後,需要在模型中指定要顯示的值。這個簡單的解決這個問題:

class Airport < ActiveRecord::Base 
    has_many :cargos, :dependent => :destroy 
    attr_accessible :name 
    validates :name, presence: true 
    validates :name, :uniqueness => true 

    def to_s 
    name 
    end 
end 

這說明,我因此未明白它一見鍾情以前,這裏原始文件https://github.com/maxivak/bootstrap3_autocomplete_input部分佈局模式。

0

用戶f.association因爲軌道會自動尋找:name喲你不有,你必須定義它像這樣:

f.association :airport, label_method: :full_airport_name, value_method: :id........etc

+0

OK thanx,這實際上是我之前生成的所有選項下拉列表, 'f。關聯:機場,:label_method =>:full_airport_name,:value_method =>:id,:order =>:iata_code,:prompt =>:translate' 但我的目標是實現自動完成/打字https://github.com/maxivak/bootstrap3_autocomplete_input而不是下拉框。 –

+0

你還想在編輯時使用自動完成輸入框嗎? – rkamun1

+0

我需要自動完成輸入框,其中查找到另一個表來自動完成查詢。這些值不應只是可選擇的可編輯。我不確定我是否正確解釋,對我的英語感到抱歉。 –