2016-05-03 128 views
0

我有一個任務的形式(使用Rails4自動完成寶石)和一個項目text_field。我希望能夠通過選擇任務來填充它。如何從另一個自動完成填充輸入文本Rails 4

所以,如果我有

  • TASK1:PROJECT1

當我鍵入'TA',然後從自動完成TASK1,我想項目場是填寫相應的項目(project1)。

這是形式:

<%= form_for :instance, url: instances_path do |f| %> 
    <%= f.label :task_name %> 
    <%= f.autocomplete_field :task_name, autocomplete_task_name_static_pages_path %> 
    <%= f.text_field :project_name %> 
<% end %> 

這是控制器:

class StaticPagesController < ApplicationController 
    autocomplete :task, :name 
end 

documentation我已經嘗試添加:

:display_value => :task_full_info 

class Task < ActiveRecord::Base 
    belongs_to :project 

    def task_full_info 
    self.project.name 
    end 
end 

但這並不奏效。在Rails 4上使用rails4-autocomplete gem做正確的方式是什麼?另外,如果將項目text_field更改爲下拉列表,我應該做些什麼?

編輯: 服務器日誌:

Started GET "/static_pages/autocomplete_task_name?term=do" for ... at 2016-05-05 18:05:50 -0300 
Processing by StaticPagesController#autocomplete_task_name as JSON 
    Parameters: {"term"=>"do"} 
    User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]] 
    Task Load (0.4ms) SELECT "tasks"."id" as id, "tasks"."name" as name, "project_name", "tasks"."project_id" FROM "tasks" WHERE (LOWER(name) LIKE 'do%') ORDER BY LOWER(name) ASC LIMIT 10 
    Project Load (0.3ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" = ? LIMIT 1 [["id", 7]] 
Completed 200 OK in 10ms (Views: 0.3ms | ActiveRecord: 1.9ms) 
+0

是我的帖子有幫助嗎? –

+0

對不起,但我不能在我的項目工作到現在:D – Gaston

回答

0

從你鏈接的文檔,我看到here你想與:project_name做什麼。所以,你的代碼看起來是這樣的:

<%= form_for :instance, url: instances_path do |f| %> 
    <%= f.label :task_name %> 
    <%= f.autocomplete_field :task_name, autocomplete_task_name_static_pages_path, :update_elements => {:project_name => '#instance_project_name'} %> 
    <%= f.text_field :project_name %> 
<% end %> 

我假設這裏instance_project_name:project_name文本字段的實際ID(它應該代碼是否如你所述)。

class StaticPagesController < ApplicationController 
    autocomplete :task, :name, :extra_data => [:project_id, :project_name] 
end 

class Task < ActiveRecord::Base 
    belongs_to :project 

    delegate :name, to: :project, prefix: true 
end 

我也建議你到你的寶石變成this one,因爲它是從文檔鏈接,似乎比你正在使用一個更加更新。

更新

事實證明,創業板確實的時候自動完成觸發如下:

1)使一個ActiveRecord的select給出的自動完成場,什麼對extra_data選項給了。所以這就是奇怪的"project_name"從你的日誌中查詢Task的原因。

2)然後需要的是的ActiveRecord結果,並使用send方法對每個請求的字段(再次,自動填充字段和上extra_data指定的那些)。

這就是爲什麼每當你從連接表需要一個領域,作爲一種解決方法,它是要求你把額外的數據foreing_key,否則1)將不能訪問外鍵,當2)它執行它不會找到關聯。

我想通過在1)查詢中始終選擇所有外鍵可以改善寶石,但現在您必須解決該變通方法。

+0

自動完成停止工作後,我添加:extra_data => [:project_name]。我做錯了什麼(我已經改變到你的建議寶石) – Gaston

+0

你是否也在視圖中添加了'update_elements'代碼? –

+0

但是,如果我更改:project_name for:name或:id,它會起作用。例如,如果我調用返回這些參數的函數,但它不起作用,而不是self.project.name或self.project_name。 – Gaston

相關問題