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

相关问题