Ruby on Rails - 简单表单自动完成关联搜索

2024-03-19

我在基本任务管理应用程序中有一个表单,允许将任务分配给用户(任务属于用户)。我为此使用简单表格。

目前,该关联以典型方式填充,带有用户下拉列表,如下所示:<%= f.association :user, label_method: :name, value_method: :id, include_blank: false %>.

但是,随着用户数量的增长,我希望将其更改为自动完成表单字段以查找用户。我尝试过遵循Railscast 的主题 http://railscasts.com/episodes/102-auto-complete-association-revised,尽管它不使用简单表单并且不适用于我的实现。

这是我的表格、模型和 .coffee 代码:

Form

<%= simple_form_for @task do |f| %>
  ...
  <%= f.input :user_name, as: :search, data: 
      {autocomplete_source: User.pluck(:name)} %>
  ...
  <%= f.button :submit %>
<% end %>

Model

# Virtual attribute for autocomplete form field
  def user_name
    user.try(:name)
  end

  def user_name=(name)
    self.user = User.find_by_name(name) if name.present?
  end

任务.咖啡

jQuery ->
  $('#task_user_name').autocomplete
    source: $('#task_user_name').data('autocomplete-source')

这会生成以下 HTML:

<input class="string search optional form-control 
ui-autocomplete-input ui-autocomplete-loading" type="search" 
value="Robert Strong" name="task[user_name]" id="task_user_name" 
autocomplete="off">

虽然开发工具控制台中出现以下错误:

Uncaught TypeError: this.source is not a function

关注autocomplete="off"在 HTML 中,无法想象 TypeError 有多大帮助!

我很困惑,因此非常感谢任何有关使其正常工作的建议!预先感谢,让我知道你的想法,史蒂夫。


autocomplete_source 需要一个数组或 URL,调用该数组或 URL 时会返回 JSON 以及与查询匹配的结果。http://api.jqueryui.com/autocomplete/#option-source http://api.jqueryui.com/autocomplete/#option-source

现在你有

  <%= f.input :user_name, as: :search, data: 
  {autocomplete_source: User.pluck(:name)} %>

那可能会返回一个 JavaScript 字符串。所以你可以把它改成这样:

  <%= f.input :user_name, as: :search, data: 
  {autocomplete_source: User.pluck(:name).to_json} %>

然后在设置自动完成时解析该 JSON:

jQuery ->
  $('#task_user_name').autocomplete
    source: JSON.parse($('#task_user_name').data('autocomplete-source'))

但从长远来看(当您有很多用户时),这将显着影响页面的加载时间。您实际上应该遵循该railscast 并将URL 作为自动完成源:

  <%= f.input :user_name, as: :search, data: 
  {autocomplete_source: users_path} %>

确保将 json 渲染路径添加到用户控制器上的索引操作中。

如果您的索引操作也用于其他用途,您可以使用respond_to:

# users_controller
def index
  @users = User.order(:name)
  @users = @users.where("name like ?", "%#{params[:term]}%") if params[:term]

  respond_to do |format|
    format.html  # index.html.erb
    format.json  { render :json => @users.map(&:name) }
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby on Rails - 简单表单自动完成关联搜索 的相关文章

  • Rails:format.js 或 format.json,或两者?

    可能很明显 但我仍然缺乏基本知识 那么在控制器内部 两者都可以使用 还是总是 Javascript 所以两者是相同的 json and js是两种不同类型的响应 它们在 Rails 中被定义为不同的 MIME 类型 Mime Type re
  • 由于继承抽象类而禁用设计器?

    我有一个项目的解决方案 那个项目中有 40 或 50 种形式 我制作了 4 个基本形式 所有其他形式都可以继承 所有 4 个基本表单都继承 System Windows Forms Form 几乎 90 的形式继承了前 2 个基本形式之一
  • 将 jQuery 验证器规则添加到 ASP 中动态创建的元素

    我在 MVC3 项目的页面上有一些动态插入的表单字段 通常我们会在服务器端添加 jQuery 验证 但在这种情况下我们不能 UI 中的多个字段生成一个隐藏字段的值 这就是提交的内容 我们无法针对隐藏字段进行验证 因此我们必须为用户可以看到的
  • 连锁函数未知次数

    我正在通过未知数量的步骤对元素的顶部 左侧 css 值进行动画处理 我使用以下代码来存储动画每个步骤所需的 css 值 paths left 300 top 161 left 402 然后我可以通过以下方式运行动画 element anim
  • Jquery Draggable()、clone() 附加 div...请拨动我的 jsfiddle

    UPDATE http jsfiddle net wJUHF 7 http jsfiddle net wJUHF 7 对于任何可能阅读本文的人来说 这是更新且有效的小提琴 我正在努力让这个小提琴发挥作用 这就是问题所在 我可以将图像拖到容器
  • 从 Ruby 中的 DateTime 变量获取时间

    我在 ruby 中工作 我有一个包含数据库中今天的日期时间的对象 我只想要时间截断数据 我怎样才能得到那个 Try 日期时间 strftime http www ruby doc org stdlib 1 9 3 libdoc date r
  • 使用jquery在标签中插入'rel'属性

    我先说我是一个 jquery 新手 也就是说 我想使用 jquery 将值为 shadowbox 的 rel 属性插入到 a 在以下代码中标记 div class bibImage title a href target self img
  • 你可以有多个 $(document).ready(function(){ ... });部分?

    如果我在启动时有很多功能 它们都必须在一个功能下 document ready function 或者我可以有多个这样的语句吗 您可以拥有多个 但这并不总是最好的做法 尽量不要过度使用它们 因为这会严重影响可读性 除此之外 这是完全合法的
  • 使用 Fetch 和 FormData API 上传多个文件

    我正在尝试使用本机Fetch https developer mozilla org en US docs Web API Fetch API and FormData https developer mozilla org en US d
  • 在私有控制器方法中返回redirect_to

    前言 我正在使用设备进行身份验证 我试图阻止未经授权的用户查看 编辑或更新其他用户的信息 我最关心的是用户将 DOM 中的表单修改为另一个用户的 ID 填写表单 然后单击更新 我已经专门阅读过 像下面这样的东西应该有效 但事实并非如此 SO
  • 如何使弹出窗口出现在我的鼠标进入悬停目标的位置?

    这是一个示例代码 用于显示我的按钮下方的弹出窗口 fn popover defaults extend fn tooltip defaults placement bottom content 现在我希望弹出窗口出现在光标移动的位置 不仅是
  • 如何使用 jquery 从 URL 获取域名?

    我有 eq 的域名 1 http www abc com search 2 http go abc com work 我从上面的 URL 中仅获取域名 输出如 1 http www abc com 2 http go abc com 我能怎
  • jQuery - 提高处理 XML 时的选择器性能

    我正在处理一个 XML 文件 当使用 XPath 样式选择器选择节点时 该文件的性能非常慢 这是运行特别慢的部分代码 for i 0 i
  • jQuery UI 内联日期选择器自动调整大小到父容器

    我正在使用 twitters bootstrap 的响应式网格系统和 jquery ui datepicker 我有一个inline row spanX 结构中的 datepicker 如下所示 div class row div clas
  • 使用 jQuery 检测容器溢出?

    我见过这个问题 https stackoverflow com questions 2059743 detect elements overflow using jquery但感觉必须有一个 更干净 的 jQuery 方法来做到这一点 我什
  • 在 jQuery 中获取 CSS 规则的百分比值

    假设规则如下 largeField width 65 有没有办法以某种方式恢复 65 而不是像素值 Thanks EDIT 不幸的是 在我的例子中使用 DOM 方法是不可靠的 因为我有一个导入其他样式表的样式表 因此cssRules参数以以
  • jspm / jQuery / TypeScript - 模块“jquery”没有默认导出

    我正在尝试使用 TypeScript 和 jspm system js 来引导 Web 应用程序进行模块加载 我还没有走多远 安装 jspm 后 并使用它来安装 jQuery jspm install jquery 以及基础知识 main
  • 在 jQuery 中绑定元素及其子元素

    我想将事件绑定到元素及其子元素 做这个的最好方式是什么 element bind click function event doSomething element bind click function event doSomething
  • javascript/jquery 禁用点击提交按钮,防止重复提交

    所以我的提交按钮如下所示 a href img src images user create product png border 0 a 当我双击它时 显然会双重提交 问题是 我将信息保存在数据库中 因此那里会有重复的信息 我不想那样 这
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲

随机推荐

  • 通过 SMTP 发送电子邮件时出错

    我正在尝试使用 gmail 作为 SMTP 通过 Java 代码发送电子邮件 但出现如下异常 请告诉我为什么找不到 gmail 主机 我在办公室网络中工作 不确定是否某些防火墙阻止其发送 如果是的话 出路是什么 Exception in t
  • Msvcr71.dll Msvcp71.dll 丢失

    我写了一些应用程序 但是当我在多个操作系统上运行它时 我们发现这两个文件丢失了 当我将它们添加到 windows system32 文件夹时 应用程序工作正常 我看到了这个解决方案如何正确安装 msvcr71 dll https stack
  • 通过 ng-init 将变量注入到控制器

    我想将具有不同值的相同变量多次注入到同一个控制器中 这就是我尝试过的 在每次调用中获取不同值的方法是什么 HTML div div div div div div
  • 如何将图像(.png)转换为base64字符串,反之亦然并将其存储到指定位置

    我正在尝试将图像 png 存储到Windows 8应用程序中的sqlite数据库中 我发现可以通过将其转换为base64字符串并将该字符串存储到数据库来完成 稍后在应用程序中 我想将该 base64 字符串转换为 png 图像并将其存储到指
  • 如何确定两个相似的乐队名称是否代表同一乐队?

    我目前正在开展一个项目 该项目要求我将我们的乐队和场地数据库与许多外部服务相匹配 基本上我正在寻找一些关于确定两个名字是否相同的最佳方法的方向 例如 我们的数据库场地名称 The Pig and Whistle 服务1 猪和口哨 服务2 猪
  • 线性过滤能否用于 MSAA 纹理到非 MSAA 纹理的 FBO blit?

    我有两个 2D 纹理 第一个是 MSAA 纹理 使用的目标为GL TEXTURE 2D MULTISAMPLE 第二个非 MSAA 纹理使用的目标为GL TEXTURE 2D 根据 OpenGL 的ARB texture multisamp
  • 如何跟踪 iOS 设备上 3G/wifi 的网络流量? [复制]

    这个问题在这里已经有答案了 我想了解一个应用程序如何DataMan http itunes apple com us app dataman real time data usage id393282873 mt 8工作 即使它在后台运行
  • 在 MSBuild 中,我可以在元数据项上使用 String.Replace 函数吗?

    在 MSBuild v4 中 可以使用函数 例如string replace on 特性 但是我怎样才能使用函数Metadata 我想使用string replace功能如下
  • 如何从 rake 文件运行 ruby​​ 类?

    我想运行一个 ruby 类样本 rake file 考虑myruby rb是一个红宝石文件 我想从以下位置运行这个样本 rake like ruby myruby rb 添加一个示例脚本来添加 tobias 在这里所说的内容 样本内容myr
  • 数组的渲染 json 问题

    我有来自我的服务器的这个数组 当我使用 put 时返回如下 formatted total price Acirc pound 66 00 formatted total price Acirc pound 128 00 formatted
  • 按钮点击声音

    这就是我想做的 我有大约 30 个按钮 我希望当点击每个按钮时 它会播放不同的mp3文件 像这样http www soundjig com pages soundfx beeps html http www soundjig com pag
  • 如何从 TypeScript 中的通用部分构建目标对象?

    我在用 电子邮件受保护 cdn cgi l email protection 我有一个目标对象 interface MyTarget a string b string c string d string 我想使用泛型创建部分对象的多个转换
  • jquery-confirm 对话框中的 jQuery UI 日期选择器

    我正在使用下面链接中的 jquery confirm 脚本 它能够在对话框中包含表单字段 您可以通过单击下面链接中的 按提示操作 蓝色按钮来查看此内容 我已经设置了表单 单个字段 但我希望这个输入是一个日期选择器 并且我不知道应该在哪里放置
  • Django Q 查询 & 在同一字段上?

    这是我的模型 class Event models Model user models ForeignKey User blank True null True db index True name models CharField max
  • 下拉菜单中的 jvectormaps,NS_ERROR_FAILURE:

    我的 jvector 地图位于下拉菜单中 它在 safari opera 和 chrome 中运行良好 但会损坏 没有地图 和错误消息 NS ERROR FAILURE 2 0 2 min js 第 700 行 return this no
  • LinkedList不能序列化?

    这是我的课程 http pastebin com 3dc5Vb1t http pastebin com 3dc5Vb1t 当我尝试跑步时 BookStore b new BookStore b LoadFromXML Server MapP
  • 如何替换 Tkinter 应用程序中的图标?

    我在 Windows 10 上使用 Python 3 5 0 并且想要替换它 要更改图标 您应该使用iconbitmap or wm iconbitmap我的印象是您想要将其更改为的文件必须是 ico 文件 import tkinter a
  • C#:GPS跟踪系统[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 C net 中构建带有移动设备 带 GPS 的 GPS 跟踪系统 场景是 通过支持 GPS 的手机跟踪用户 服务工程师 这里没
  • 保持鼠兔 BlockingConnection 存活而不禁用心跳

    我正在使用 pika 0 10 0 和 python 2 7 版本开发 RabbitMQ 消费者 在我的消费者客户端中 我有一个根据输入消息运行一段时间的进程 时间可能从 3 到 40 分钟不等 我不想禁用心跳 相反 我正在寻找一些回滚机制
  • Ruby on Rails - 简单表单自动完成关联搜索

    我在基本任务管理应用程序中有一个表单 允许将任务分配给用户 任务属于用户 我为此使用简单表格 目前 该关联以典型方式填充 带有用户下拉列表 如下所示 但是 随着用户数量的增长 我希望将其更改为自动完成表单字段以查找用户 我尝试过遵循Rail