Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails 4中将集合选择更改为自动完成关联以执行创建操作_Ruby On Rails_Forms_Select_Activerecord_Autocomplete - Fatal编程技术网

Ruby on rails 在rails 4中将集合选择更改为自动完成关联以执行创建操作

Ruby on rails 在rails 4中将集合选择更改为自动完成关联以执行创建操作,ruby-on-rails,forms,select,activerecord,autocomplete,Ruby On Rails,Forms,Select,Activerecord,Autocomplete,我有一个带有任务模型、用户模型和配置文件模型的rails应用程序。用户有多个任务,用户有一个配置文件。Assigneruser可以在新任务表单中选择一个executoruser。在用户模型中,有一个电子邮件地址attr,用于在当前的新任务表单中查找任务执行者w/collection select 在配置文件模型中,有名、姓和公司名。我想使用这些属性来查找新的任务执行器w/autocomplete关联。当用户开始键入名称或公司时,会弹出类似约翰·史密斯公司(John Smith Company I

我有一个带有任务模型、用户模型和配置文件模型的rails应用程序。用户有多个任务,用户有一个配置文件。Assigneruser可以在新任务表单中选择一个executoruser。在用户模型中,有一个电子邮件地址attr,用于在当前的新任务表单中查找任务执行者w/collection select

在配置文件模型中,有名、姓和公司名。我想使用这些属性来查找新的任务执行器w/autocomplete关联。当用户开始键入名称或公司时,会弹出类似约翰·史密斯公司(John Smith Company Inc.)的内容。我已经关注了相关的railscasts事件,但我没能成功,因为这里涉及到多个模型和属性

我尝试了不同的方法,但都不奏效。我甚至无法保存新任务,因此这是我想修复的第一个任务

更新:-------------

它目前正在工作,下面的代码正在更新,但它不是最有效的。 1.例如,如果我在文本区域中键入first_name和last_name或first_name和company,那么jqueryui将不返回任何类似的查询。所以,如果我击中彼得或史密斯,那么彼得·史密斯将弹出,但如果我击中彼得·史密斯,那么它将找不到彼得·史密斯。 2.当我在选择sby之后试图保存任务时,我遇到了一些关于基于呈现的json查找特定执行者的问题。例如,大多数公司名称都包含类似于Dream Inc.的空格。为了避免这个问题,我使用它来查找执行者:--名称的首字母是什么?和last_name(如?、name.split“”[0]。camelize、name.split“”[1]。camelize--但如果first_name或last_name中有空格,则不会创建任务

如何优化我的代码

旧代码:

task.rb

belongs_to :assigner, class_name: "User"
belongs_to :executor, class_name: "User"
user.rb

has_many :assigned_tasks, class_name: "Task", foreign_key: "assigner_id", dependent: :destroy
has_many :executed_tasks, class_name: "Task", foreign_key: "executor_id", dependent: :destroy
旧task.new.html.erb:

<div class="field form-group">
  <%= f.label :executor_id %>
  <%= f.collection_select(:executor_id, User.all, :id, :email, class: "form-control") %>
</div>
<div class="field form-group">
  <%= f.label :task_name_company %>
  <%= f.text_field :task_name_company, class: "form-control" %>
</div>
用于jQuery UI的TaskNameCompanys\u controller.rb

class TasknamecompaniesController < ApplicationController
  def index
    @executors = User.joins(:profile).where("first_name LIKE ? OR last_name LIKE ? OR company LIKE ?", "%#{params[:term].camelize}%", "%#{params[:term].camelize}%", "%#{params[:term].camelize}%").all
    render json: @executors.pluck(:first_name, :last_name, :company).map{|e| e.join(' ')}
  end
end

你跟着哪个火车站?你的代码似乎没有自动完成搜索的功能。是的,因为我无法创建任务,所以还没有自动完成。现在,任务创建正在使用上面的代码工作,但我不知道如何为我的任务名称公司方法在那里设置autcomplete函数。我将在那里发布它,railscast用于Rails 3。您可能正在使用Rails 4,您应该这样做。下面是railscast在Rails 4中的自动完成教程:谢谢Bryan,我正在查看它,并会让您知道它是如何工作的。Bryan,这个railscast似乎也是Rails 3。我是从rails 4开始的,所以我不认识它们的区别。
class TasknamecompaniesController < ApplicationController
  def index
    @executors = User.joins(:profile).where("first_name LIKE ? OR last_name LIKE ? OR company LIKE ?", "%#{params[:term].camelize}%", "%#{params[:term].camelize}%", "%#{params[:term].camelize}%").all
    render json: @executors.pluck(:first_name, :last_name, :company).map{|e| e.join(' ')}
  end
end