问题标签 [nested-forms]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5795 浏览

javascript - 在rails中使用accepts_nested_attributes_for的三层嵌套表单

我一直在尝试accepts_nested_attributes_for在我的 rails 应用程序中实现动态多模型表单。我一直在关注 Eloy Duran 的复杂形式示例,该示例显示了 2 级实现,但我一直在尝试将其扩展到 3 级。是否支持accepts_nested_attributes_for3 级表格?谁能告诉我如何扩展示例应用程序?

我已经让 javascript 部分工作(由于某种原因并不总是工作)第三级,但我无法保存第三级对象。它为每个属性传递的参数名称是:

曾祖父母是表单的对象,祖父母是第一级,父母是第二级,对象是第三级(我要保存的那个)。

谢谢,我很感激任何指点。

0 投票
2 回答
13090 浏览

ruby-on-rails - Rails - 单个表单上多个模型的用户输入 - 如何

这基本上是一个嵌套形式的问题,尽管只有一个字段属于父模型。我的数据输入表单收集模型的数据 - 但是我还需要收集另一个数据元素/值 (UserID),该数据元素/值 (UserID) 实际上进入将使用详细记录创建的父记录。

AFAIK Rails 期望每个表单字段映射到一个模型,我需要创建一个未绑定的数据输入字段,我将单独使用它。

如何覆盖此默认行为并创建“自由格式/未绑定字段”?

不列颠哥伦比亚省 TIA

0 投票
1 回答
4532 浏览

ruby-on-rails - 在 Rails 中使用 accept_nested_attributes_for + 批量分配保护

假设你有这个结构:

请注意,不能故意访问 Tv 的用户。因此,您有一个三重嵌套表单,可让您在一个页面上输入房屋、房间和电视。

这是控制器的创建方法:

问题:您将如何user_id为每台电视填充内容(它应该来自 current_user.id)?有什么好的做法?

这是我在此看到的catch22。

  1. user_ids直接填充到params哈希中(它们非常嵌套)
    • 保存将失败,因为user_ids不可批量分配
  2. #save 完成后为每台电视填充用户
    • 保存将失败,因为user_id必须存在
    • 即使我们绕过上述内容,电视也会有一段时间没有 id - 糟透了

有什么体面的方法可以做到这一点吗?

0 投票
1 回答
3105 浏览

ruby-on-rails - rails 以复杂的形式验证多个子模型

我正在以复杂的形式使用多个子模型(例如http://railsforum.com/viewtopic.php?id=28447)。表单效果很好,但在将表单数据接收到数据库之前,我需要验证子模型集的属性。我想出了一种主要工作,非常笨拙的方式来做到这一点。似乎必须有更好的方法,所以我正在寻求建议......

基本上一个人有很多分布。分布具有(除其他外)百分比属性。对于给定的人,他们的分配必须总计 100% 才有效。这对我来说是“交易”,但我认为我应该先给验证者一个机会。

我尝试将其编写为自定义验证器,但验证器仅适用于已保存到数据库中的数据。它没有检查表单提交的参数。换句话说,我能够通过表单输入无效的百分比,这些百分比被保存,然后由于模型中已经存在错误数据,随后的编辑都失败了。

接下来我在我的 Person 模型中扩展了 update_attributes,添加了一个事务:

retval 业务很丑陋,但这或多或少是有效的(有时,当它发现错误并重新渲染时,表单中会缺少一些待处理的分发版)。还有一个细微的差别让我相信这是一个糟糕的方法:如果我的分布关联是用辅助方法定义的,如下所示,我不能在我的update_attributes()(或在distributions_exactly_100?)中使用辅助方法,因为它们进入数据库而不是在刚刚分配但尚未提交的分布集上运行。

我能想到的唯一另一件事是在进入 update_attributes 的过程中将参数本身作为文本处理。但那是错误的。:)

还有其他人对整个儿童集合进行验证吗?正确的方法是什么?

0 投票
2 回答
3262 浏览

ruby-on-rails - Rails:以嵌套形式保存许多新对象

我有 2 个模型:

视频:

d

缩略图:

我正在使用 YouTubeG gem 来搜索视频。

搜索返回的每个视频在视图中都有一个表单:

f.fields_for :thumbnails 产生 <input type="hidden" value="http://i.ytimg.com/vi/s8eigkwmMEo/0.jpg" name="video[thumbnails][url]" id="video_thumbnails_url"/>

这似乎是错误的,因为我想保存此视频的所有缩略图。

当我尝试保存时,我得到

视频控制器中的 ActiveRecord::AssociationTypeMismatch#create

参数:

{"commit"=>"保存", "video"=>{"name"=>"Karajan - 贝多芬第七交响曲", "url"=>"s8eigkwmMEo", "user_id"=>"1", " thumbnails"=>{"url"=>" http://i.ytimg.com/vi/s8eigkwmMEo/0.jpg "}}} <应该有4个缩略图

0 投票
1 回答
3678 浏览

ruby-on-rails - Rails:嵌套表单对象的单选按钮选择

我有以下 photo_album 表单,它使用 Rails 的嵌套表单功能在更新 photo_album 时保存照片。并且在选择单选按钮值时遇到问题。我希望只有一张照片能够选择作为专辑封面,但由于 rails 生成表单元素 ID 和名称的方式,我可以选择所有照片作为专辑封面。有什么解决方法吗?

以下是 rails 为单选按钮生成的 html(这是问题的一部分):

0 投票
1 回答
590 浏览

ruby-on-rails - 带有 collection_select 的 NoMethodError

我正在建立一个:has_many :through关系表格:

Employment模型包含字段:account_id:person_id

在帐户表单中,我添加:

collection_select,或者select同样,在我给他们的任何排列中,都会因 NoMethodError 异常而失败:

就好像该person_id字段不存在,但我可以调用 create 方法:account_id并且:person_id非常好。

0 投票
1 回答
406 浏览

ruby-on-rails - 审计和建模实例及其关联的生命周期管理?

我正在尝试编写一个应用程序来跟踪法律案件请求。主要模型是 Case,其中包含has_manySubjects、Keywords、Notes 和 Evidences(反过来又是has_manyCustodyLogs)。由于该应用程序与法律相关,因此有一些不同寻常的要求:

  • 必须记录 CRUD 操作,包括操作是什么、参与者是谁以及操作发生的时间
  • 需要有某种方法来验证数据(即记录记录的 MD5 校验和)
  • 一些数据应该是一次性写入的(即应用程序可以创建一个审计日志条目,但此后不能在应用程序内编辑或删除该日志)
  • 可能应该在整个嵌套过程中记录对关联对象的更改。例如,将 CustodyLog 添加到一个 Evidence 应该有一个日志用于它自己,一个日志用于它的 Evidence,一个日志用于父案例。这是为了确保 Case 的上次更新时间戳准确地反映了真实的上次更新,而不仅仅是 Case 模型数据本身更改的上次时间。

我有一些这样的工作,但我遇到了一个问题。身份验证由外部 Web 单点登录服务处理,因此登录用户 ID 的唯一可见性是在请求变量中。例如,如果我通过回调将审计日志记录在模型中,我可以相当确定所有数据修改都已记录,但模型对请求变量不可见,因此我无法记录用户 ID。这也确保了对状态机(当前使用 state_machine 插件)的更改被记录下来。

另一方面,如果我将审计日志记录放在应用程序控制器中,我将无法确保记录所有 CRUD 操作(例如,调用 Subject.create 的案例模型中的代码不会被记录) . 我也认为我会失去状态变化。

有没有办法确保在整个关联树中记录所有 CRUD 操作,以便记录登录用户的用户 ID?

0 投票
1 回答
575 浏览

ruby-on-rails - 嵌套对象模型、视图循环和错误输入使视图循环异常

我一直在谷歌搜索和测试这个问题很长一段时间,但找不到答案。

我有一个网站,服务器调查由管理员上传。这些调查属于调查周期,答案属于答案。

控制器对于嵌套对象来说是非常基础的

if 中的所有内容,因为 render :action => "new" 似乎使用了 create 中的对象。

我用这样的部分处理的视图

新的.html.erb

视图部分中的内容非常臃肿,因为问题可能来自各种各样

现在关于这个问题!当用户提交此表单时,它显然会再次呈现表单(我强制应答控制器 create-action 'render :action => "new" 以调试我一直遇到的这个问题)。不是再次获得相同的表格,而是将问题呈现 x 次,其中 8 个问题 x 为 9。例如,对于 8 个问题的短调查周期,在第一次提交后,每个问题显示 9 次。查看页面源码,第一次提交时输入id:s从0到8,然后0到80,然后突然0到728。

我将说明这一点:

用户点击提交后,变成:

这可能是一个错误或什么,还是我做错了什么?

如果需要,我可以发布更多内容。

0 投票
1 回答
1058 浏览

sql - Ruby Rails 嵌套记录

我不确定我什至想要做的事情是否可行,但是就这样。

我有一个定义了以下表的 SQL 数据库(仅显示 SQL 中的相关表):

如您所见,“客户”表定义了与地址的一对关系(一个用于帐单地址,一个用于邮政/送货地址)。这里的想法有两个方面:

  1. 通过使用与地址表的关系将重复的地址字段保存在客户表中。
  2. 稍后我可以使用地址 ID 轻松填写“订单”的送货地址。

现在我想使用带有导轨的 Active Record 来建模。到目前为止,我有以下内容:

1)“客户”模型:

2)地址模型(默认):

3)客户控制器(仅显示相关方法,即新建和创建):

3)我的嵌套表格也用于创建具有帐单地址的新客户。

现在来解决问题。当我填写此表格并继续创建新记录时,我收到以下错误:

据此,我了解到帐单地址不是在客户之前创建的。我认为(可能非常天真)活动记录会识别客户和地址记录之间的关系并执行正确的操作来创建新记录。显然情况并非如此。

我怎样才能做到这一点?我假设逻辑需要在客户控制器中首先保存地址记录,然后获取该记录的 ID 以在客户控制器中使用。全部在交易中?或者,也许我刚刚以一种糟糕的方式对我的数据库进行了建模?

希望所有这些代码不要太多,但我想提供尽可能多的上下文。