Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 Ruby on Rails设计编辑注册表,可以选择或添加单独的模型(例如公司)_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails Ruby on Rails设计编辑注册表,可以选择或添加单独的模型(例如公司)

Ruby on rails Ruby on Rails设计编辑注册表,可以选择或添加单独的模型(例如公司),ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我有一个用户模型和一个公司模型以及一个带有表单的编辑配置文件页面。表单的一个字段是从列表中选择一个公司,并保存到名为company_id的列中的Users表中,该列链接到companys表中每个公司的id 这一切都很好 但是,我更希望有一个文本字段,用户可以在其中键入公司名称并选择建议,或者创建一个新公司(如果他们的公司不在数据库中) 我是ruby新手,如果有人能帮忙,我想知道最好的方法 app\views\designe\registrations\edit.html.erb 我已经在我的项目

我有一个用户模型和一个公司模型以及一个带有表单的编辑配置文件页面。表单的一个字段是从列表中选择一个公司,并保存到名为company_id的列中的Users表中,该列链接到companys表中每个公司的id

这一切都很好

但是,我更希望有一个文本字段,用户可以在其中键入公司名称并选择建议,或者创建一个新公司(如果他们的公司不在数据库中)

我是ruby新手,如果有人能帮忙,我想知道最好的方法

app\views\designe\registrations\edit.html.erb


我已经在我的项目中使用了Twitter。它非常平滑和轻巧,你只需要将一个数组传递给它,它就可以为你完成这个任务

此处列出了一些详细的文档和示例:

捆绑安装

在application.js中,在require_树上添加以下行:

在控制器中,可以初始化阵列:

@companies = Company.pluck(:name)
在你看来:

<div id='search'>
  <%= f.text_field :company, class: 'mdl-textfield__input' %>
</div>

如果您在答案中提供相关的上下文,您的答案将得到更好的改进。如果目标站点无法访问或永久脱机,则仅提供链接将没有用处。嗨,法汉,谢谢你的帮助。唯一的问题是,虽然我希望用户键入公司名称,但我希望应用程序找到该公司(如果存在),并将该公司的id提交到users表中的company_id字段。如果该公司存在,我希望它将一个新公司添加到companys表中,并将该新公司的id提交到users表中的company_id字段中。在这种情况下,您需要使用ajax实时获取和创建公司,但是,我不希望这样,在上述情况下,当用户提交表单时,您可以在用户创建操作中以Company.wherename:params[:Company]的形式进行查询。首先\u或\u create将解决此问题。
@companies = Company.pluck(:name)
<div id='search'>
  <%= f.text_field :company, class: 'mdl-textfield__input' %>
</div>
var companies = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.whitespace,
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  local: #{@companies},
});
$('#search .mdl-textfield__input').typeahead('destroy').typeahead({
  hint: true,
  highlight: true,
  minLength: 2
},
{
  source: companies
});