UJS、AJAX、Rails 4、form_for collection_select 将值传递到方法并将值返回到表单

2024-04-03

我对 Rails 非常陌生,因此在一起处理 AJAX、UJS 和 Rails 时遇到很多困惑。我查看了railscast,几个SO答案,尝试了freenode上的#rubyonrails IRC频道。 唉,我还是被困住了。

无论如何,这是我的问题。

所以我有两个模型,建筑和财产。财产属于_建筑物并且建筑物有_许多财产。

我已将外键添加到 Property 作为building_id。

现在,在我的建筑模型中,我有一个方法:self.search(search) 并给出正确的地址(例如 999 Decarie),它将正确从数据库中的 Building 表返回building_id。

def self.search(search)
    #search.instance_variables.map {|v| "#{v}: #{search.instance_variable_get(v)}\n"}.join
    if ((search.nil?) || (search == ""))
        nil
    else
        search = search.to_s
        d { search }
        split = search.split(' ', 2)
        stnum = split.first
        d { stnum }
        stname = split.last
        d { stname }
        Building.where("streetno = ?", stnum).where("streetname = ?", stname).pluck(:id).first
    end
end

在我的属性部分_form中,我有一个form_for循环,它使用collection_select来允许用户选择任何建筑物地址(例如999 Decarie)(因此它呈现为选择/选项HTML下拉列表)。

<div class="field" id="selection">
   <%= f.collection_select :buildinginfo, Building.all, :half_address, :half_address, {:label => "Building Info"}%>
</div>  

那么,我该如何使用不显眼的 javascript/ajax

A. 用户在表单中选择后立即获取集合 select 的选定值,并将其传递给上面提到的建筑模型方法(self.search(search)),该方法返回正确的建筑 ID。

B. 立即获取该方法返回的建筑物 ID,并将其存储在表单上的隐藏字段中(对应于 Properties 模型中的building_id 字段)。 (在下面的代码中,我想用建筑物 ID 替换值 1)

 <div class="field" id="selection_id">
         <%= f.hidden_field :building_id, :value => 1 %>  
      </div>    

因此,允许我的关联工作,这样当我删除建筑物时,它的所有相关属性也会被删除。

如果您需要更多代码,请告诉我,我正在使用 Rails 4,非常感谢!


Ajax

在铁轨中,Ajax http://en.wikipedia.org/wiki/Ajax_%28programming%29与网络上其他任何地方的工作方式完全相同 - 您使用 Javascript 发送异步请求,服务器处理并发送响应。

Rails 的技巧是让你的代码尽可能模块化,这就是为什么ujs东西在应用程序中经常使用。你最好读一下Rails' ujs阿贾克斯能力 https://github.com/rails/jquery-ujs/wiki/ajax here https://github.com/rails/jquery-ujs/wiki/ajax

一旦用户选择它

听起来像你需要.on("change":

#app/assets/javascripts/application.js
$(document).on("change", function(){
   $.ajax({
       url: "your/path",
       data: {search: $(this).val()},
       success: function(data) {
           // ... do stuff here
       }
   });
});

这基本上会将请求发送到您的服务器,允许您根据需要处理响应。

立即获取该方法返回的建筑物ID并将其存储在隐藏字段中

你会想要这样做:

#Ajax method
success: function(data) {
    $("#element").val(data);
}

这需要附有respond_to像这样在你的控制器中阻止:

#app/controllers/your_controller.rb
respond_to :js, :json
def search
   @search = Model.search params[:search]
   respond_with @search
end

--

Data

有趣的一点 - 你可以使用.find_by而不是多个where像这样的查询:

Model.find_by(name: value, name: value).pluck(:id)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UJS、AJAX、Rails 4、form_for collection_select 将值传递到方法并将值返回到表单 的相关文章

  • PHP、jQuery 和 Ajax 调用乱序

    我正在使用 jQuery 进行 Ajax 调用 我有 x 数量的 Ajax 调用附加到 div 这些 Ajax 加载请求是由 PHP foreach 循环生成的 问题是它们渲染的顺序不正确 它们被设置在数组中
  • 谷歌地图 v3 API 鼠标悬停在多边形上?

    我正在使用 google v3 api 构建地图 因为它更快 本质上 它是一张包含约 30 个城市的区域地图 这些区域上有多边形 当用户将鼠标悬停在城市上时 我希望 fillColor 变亮 然后在鼠标移开时返回到正常状态 当用户单击时 它
  • Shoulda/RSpec 匹配器 - 条件验证

    在我的代码中 我使用 Shoulda 匹配器进行了以下验证 效果很好 it should validate presence of name 在我的模型中 我已将条件添加到验证中 validates presence of name if
  • .live() 或 .livequery()

    我有一个Ajaxed的网站 Ajax的内容来自其他页面 例如about html contact html ajax 从名为 main content 的 div 获取内容 但是在 ajax 调用之后 我的其余脚本就中断了 比如tinysc
  • 让 Rails 生产在端口 80 上运行

    我正在尝试让我的 Rails 应用程序在生产模式下运行 但遇到了一些困难 我正在使用 Passenger 和 apache 并运行 Ubuntu 12 04 我已经配置和创建了生产数据库 并设置了乘客 状态如下 rvmsudo passen
  • JQuery:将 FormData 和 csrf 令牌一起发布

    Is the data 下面的行正确吗 我想将表单数据和 csrf 令牌发布到 Django 视图函数 file upload on change function var currentpath window location pathn
  • 运行规范时设计 2.0“layout_by_resource”弃用警告

    我正在使用 Rails 3 2 0 和 Devise 2 0 0 rc2 当我运行规范时 我收到一条弃用警告 当我正常启动 Rails 服务器时不会看到该警告 rake DEPRECATION WARNING Layout found at
  • ruby on Rails:音频/mp3 内容标题下载

    如何在 ruby rails 中设置下载标题 在 php 中 我为 mp3 下载设置标头 如下所示 header Content Transfer Encoding binary header Content type audio mp3
  • 高效地重新安排 ActiveJob (resque/sidekiq)

    我正在玩Rails 4 2应用程序使用ActiveJob受支持resque sidekiq用于电子邮件安排 当用户创建时事通讯活动时 会创建一个新作业并安排在特定日期 这一切都很好 但是当用户更改交货日期时会发生什么 在这种情况下 每个作业
  • MySQL正则表达式:如何将字符串中的数字与\d匹配?

    我有一个专栏release date它以字符串格式存储日期 不是 DATETIME 格式 因为它们有时可以是任何其他字符串文字 我想根据给定的月份和年份查找任意日期的所有记录 尝试遵循但对我不起作用 gt Post find all con
  • RSpec:如何在静态方法上使用should_receive?

    我在 lib gcm rb 中有一个模块 require net http require uri module GCM def self dispatch message reg ids data url URI parse GCM UR
  • Travis-CI 上的 Rails 数据库设置

    我正在尝试在 Rails 项目上使用 Travis 持续集成 文档说 对于 SQLite3 测试数据库必须配置如下 test adapter sqlite3 database memory timeout 500 但我想保留本地测试的默认配
  • 在 Rails 中本地化嵌套虚拟属性

    怎么可能本地化嵌套虚拟属性在 Rails 中 该模型 class User lt ActiveRecord Base attr accessor company information This is used in callbacks e
  • 用javascript调用外部网页(跨域)

    我正在尝试使用以下网络服务来验证提要这个问题 https stackoverflow com questions 11996430 check if a url is a valid feed 但浏览器不允许我向另一台服务器发送 ajax
  • Ajax 没有将我重定向到下一页

    我正在尝试将单击的图像的 ID 传递到下一页 当我开发代码时 它没有将我重定向到下一页 当我单击 F12 并检查网络中的 POST 时 它显示变量已正确传递到下一页 如附图所示 但它没有将我重定向到下一页 所以现在我知道变量在下一页中正确传
  • jQuery.post 改变 HTML 中的一些特殊字符

    TinyMCE 中的示例数据 和 以上HTML代码 p 10003 and 9786 9999 9986 p 之前 工作正常 在保存的文档中获得相同的字符 function save and submit var tinyGenData t
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 动态速度计 javascript 或 jquery 插件

    我希望有动态ajax插件在页面上显示速度计 一个想法是我设置一个背景并旋转针 有人知道相关插件吗 这里有一些供您参考 http bernii github com gauge js http bernii github com gauge
  • 将对象转换为哈希,然后将其保存到用户的列

    找不到任何接近我想做的事情 我想将一个对象存储到用户的列中 该列采用数组的形式 postgres def change add column users interest string array true default end 我有另一
  • 文件位置 Rails 7 中的 Javascript 与样式表

    在使用导入映射功能的新默认 Rails 7 应用程序中 Javascript 存储在app javascript 而 CSS 位于app assets stylesheets 它们不仅位于不同的层次结构级别 而且javascript是奇异的

随机推荐

  • 如何识别模板参数是否为 std::complex?

    如何判断模板参数是否为std complex 我想要一个支持所有数据类型 如 float double int 等 的通用方法 我知道使用 std is same 我可以专门检查给定类型 例如 std complex
  • 使用 System.Text.Json 自定义可选属性的 JSON 序列化器

    我正在尝试实现一个处理两者的 JSON 序列化机制null和缺失的 JSON 值 以便能够在需要时执行部分更新 这样当值缺失时它不会触及数据库中的字段 但当值显式设置为时它会清除它 null 我创建了一个从 Roslyn 复制的自定义结构O
  • 从另一个 Jenkins 管道构建一个 Jenkins 管道时覆盖默认参数

    目标 当我从另一个 Jenkins 脚本构建时 用 false 覆盖 Jenkins 布尔参数默认值 true 我已经检查了其他 StackOverflow 项目中建议的可能答案 似乎没有什么匹配的 然而 他们确实向我展示了如何在从另一个
  • 使用 Apache httpclient 进行 https

    我已经在 tomcat 中启用了 https 并拥有用于服务器身份验证的自签名证书 我使用 Apache httpClient 创建了一个 http 客户端 我已经设置了一个加载服务器证书的信任管理器 http客户端可以毫无问题地与服务器连
  • 在 XML 中设置微调器模式

    在代码中定义微调器时 可以将模式设置为 对话框 或 下拉 Spinner Context上下文 int模式 使用给定上下文的主题和提供的显示选项模式构造一个新的微调器 但在 XML 中定义布局时我找不到此选项 我是否错过了它 或者这在 XM
  • 调试会话

    作为性能测试的一部分 我需要调试会话等 如果我删除 则会运行相同的代码session gt 当我添加它时 它说模拟期间没有发送任何请求 因为它没有发送任何请求 val scn1 scenario LaunchAction exec sess
  • 有效电子邮件地址的最大长度是多少?

    有效电子邮件地址的最大长度是多少 它有任何标准定义吗 电子邮件地址不得超过254人物 IETF 接受了以下内容 可以对任何给定地址进行全面诊断online http isemail info RFC 3696 的原始版本将 320 描述为最
  • 一元加运算符在 Excel 公式中起什么作用?

    这个看似微不足道的操作在公式中的许多情况下都非常有用 A 否则会引发错误的函数 QUOTIENT A1 A3 4 WORKDAY A1 A3 7 B 将范围转换为数字 即任何文本为零 N A1 C3 C 返回来自不同工作表的混合数据数组 C
  • 无效的流标头:2C6D0005 - StreamCorruptedException

    我从 servlet 应用程序下载了一个序列化的 Java 对象 当我尝试用 Java 代码打开它时 我得到 java io StreamCorruptedException 无效的流标头 2C6D0005 我搜索了互联网 但找不到任何代码
  • 有没有办法获得 typeof Func

    简洁版本 我们可以得到typeofFunc
  • R 2.14 字节编译 - 为什么不呢?

    为什么我不对我安装的所有软件包进行字节编译 字节编译是否会产生一些后果 使其成为需要考虑的决定 一个缺点是您无法调试字节编译的代码 另一方面 一旦 代码已准备好用于生产 理论上您不需要它 如果需要 您可以重新安装它而不进行字节编译
  • google.script.run.withSuccessHandler 不返回值

    这让我抓狂 代码昨天还可以工作 但现在不行了 我尝试再次检查所有语法 但问题仍然存在 来自 Google Sheets 的此服务器端请求显示服务器端的值 Logger log 但返回null在客户端 function supervisorL
  • perl,使用 IO::Select 和 IO::Socket::INET 读取阻塞

    该服务器工作正常 但如果我这样做 bash echo n abcd sleep 50 echo efgh 数控本地主机 9090 服务器阻塞 50 秒 在我的完整代码中 我有不止一个IO Select INET 我有另一个套接字侦听其他端口
  • 生成访问令牌并通过 Azure API 管理针对 IdentityServer4 进行验证

    我有一个外部端点 它将访问 Azure API 网关 并将其路由到受 IdentityServer4 授权保护的后端 API 如果我使用来自 IdentityServer 的交互式 UI 通过 Postman 客户端访问它 我就会获得访问令
  • 如何在nmake中转义空白

    我正在尝试使用 nmake 调用 MSTest TEST VS90COMNTOOLS IDE MSTest exe test TEST testcontainer Test dll 当我运行 nmake 时我得到 nmake test C
  • 0x800a1391 - JavaScript 运行时错误:“WinJS”未定义

    我已经从下载了代码CodePlex http codeshow codeplex com 然后我安装 live telerik 等的 sdk 安装后我运行代码并收到以下错误 0x800a1391 JavaScript runtime err
  • 从node.js访问memcached的简单方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道是否有一个好的驱动程序或本机实现可以将 node js 直接连接到 memcached 这是我使用几个node memcach
  • 如何通过 Google BigQuery 的 Python 客户端库设置现有表过期?

    使用官方的Google BigQuery 的 Python 客户端 https googleapis dev python bigquery latest index html似乎没有办法设置桌子expires 或其他属性 上existin
  • 如何管理访问 Django REST API 的权限?

    我正在构建一个公开 REST API 的 Django 应用程序 用户可以通过该 API 查询我的应用程序的模型 我正在按照说明进行操作here http www django rest framework org tutorial qui
  • UJS、AJAX、Rails 4、form_for collection_select 将值传递到方法并将值返回到表单

    我对 Rails 非常陌生 因此在一起处理 AJAX UJS 和 Rails 时遇到很多困惑 我查看了railscast 几个SO答案 尝试了freenode上的 rubyonrails IRC频道 唉 我还是被困住了 无论如何 这是我的问