问题标签 [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 投票
1 回答
268 浏览

ruby-on-rails - 嵌套表单和 link_to_function

我有一个像这样的嵌套形式:

我第一次加载页面时,第一个 fields_for 块的 id 为 0;

我第一次单击“添加日期”时,会创建一个 id = 1 的新 fields_for 块;

然后,每次我点击“添加日期”时,都会显示一个新的 fields_for 块,但 id 保持为 1。

一个 HTML 示例可能更明确,这是我得到的输出:

感谢您提前为您提供帮助!

0 投票
1 回答
1717 浏览

ruby-on-rails - rails: create Parent, if doesn't exist, whilte creating child record

Any best practices for the following?:

I have Manufacturer model that has_many Inventory

In my new Inventory form I want a field that maps to Manufacturer.name so that when one submits the new Inventory form the app:

  • searches for a manufacturer with the 'name' from the form
    • if it exists then assign the id to @inventory.manufacturer_id and save @inventory
    • if it doesn't exist then create the manufacturer with the 'name' from the form, assign the id to @inventory.manufacturer_id and save
    • have validations work on the new Inventory form
      • such that, if the the Inventory form fails validation on a field other than 'name'
        • the 'name' field will be repopulated with whatever the user entered (but a new manufacturer is not created unless the form passes validation)
0 投票
1 回答
1047 浏览

ruby-on-rails - 嵌套模型抛出未定义的方法错误

我一直在关注RailsCast 197来尝试这个嵌套模型/表单,并且已经破解了这个代码超过 2 小时,但无济于事。我在看什么?

我有以下型号:

在我的 WorkoutsController 中,我有以下内容:

当我在浏览器中运行测试并调用控制器时,出现以下错误:

提前感谢您的帮助 - 我的 RoR 贵族不再让我感到惊讶!

编辑:fflyer05:我尝试使用与 RailsCast 相同的代码迭代集合,并尝试在 perform_exercises[0] 上构建 perform_sets - 但它不起作用。做任何其他事情,我得到一个未初始化的常量 PerformedExercise::PerformedSet 错误

0 投票
1 回答
439 浏览

ruby-on-rails - 如何正确编写具有 NN 关系的嵌套形式

在开发 Rails 3 应用程序时,我遇到了嵌套表单的问题。

一个集合是一组预定义的对象(使用 db:seed 创建)。另一个集合应该显示一个允许选择一些元素的表单。

一个例子比一个长描述更好,所以在这里。

假设您有 2 个模型:用户和组。

假设有几个组:Member、Admins、Guests、...

您希望您的用户有多个组,因此您需要一个中间表:成员资格。

模型代码很明显:

控制器不需要更改。然而,这种观点更为复杂。

我想显示一个复选框列表以选择几组预定义的复选框。

我在这里使用_destroy具有反转值的特殊字段,以在实际未选中时销毁(因此在选中时将用户添加到组中)

然而,这并没有按预期工作,因为表单g总是会在每个组之后创建一个具有任意 id 的输入(甚至通过在 之后包含它来破坏布局</li>):

了解嵌套属性的语法如下:

每次发送 id 都不起作用,因为它会尝试更新不存在的记录而不是创建它,并在记录不存在时尝试销毁。

我找到的当前解决方案是删除所有错误的ID(它们应该是成员资格的ID,而不是简单的索引),并在用户已经拥有该组时添加真实ID。(这在创建和更新之前在控制器中调用)

fields_for这看起来很不对,而且它在控制器中添加了很多逻辑,只是为了控制视图助手的不良行为。

另一种解决方案是自己创建所有表单 html,尝试模仿 Rails 约定,并避免 id 问题,但这在代码中确实很吵,我相信有更好的方法。

  • 这是一种让fields_for工作变得更好的方法吗?
  • 有没有更合适的帮手?
  • 我在这个问题的某个地方推理错误吗?
  • 你将如何做到这一点?

谢谢

0 投票
2 回答
3889 浏览

ruby-on-rails - Rails 嵌套属性和自定义验证

我对 Ruby 和 Rails(使用 2.3.8)都很陌生,所以如果我在这里遗漏了一些非常明显的东西,请原谅我,但我已经为此苦苦挣扎了一段时间,而且我的搜索没有结果。

在我的代码中,我有计划,一个计划有很多 Plan_Steps。每个 Plan_Step 都有一个数字(表示“1st”、“2nd”等)。我有一个更新计划的表格,我需要验证每个 Plan_Step 是否有唯一的编号。下面的代码可能会更好地解释设计:

模型/计划.rb:

控制器/plans_controller.rb:

现在,当我的表单提交更新时,params 哈希如下所示:

该数据库包含 Plan_Steps 的条目,其中包含以下内容:

请注意 ID=2 与 Number=2 存在,我要做的是删除 ID=2 并创建一个 Number=2 的新条目(ID=3)。

好的,所以有了这个设置,这是我的问题:

当我在验证中调用 plan_steps 时,它似乎是从数据库中提取值,而不是从传递给 update_attributes 的 params[] 数组中提取值。

例如,如果我在验证中取消注释“puts”行,我会看到 Plan_Steps 的描述,因为它们存在于数据库中,而不是它们存在于传入的参数中。这意味着我无法验证传入的 Plan_Steps。

我也无法在 Plan_Steps 模型中进行验证,因为除非我弄错了,否则验证将针对数据库(而不是传入的参数)进行。

如果这是一个措辞不当的问题,我深表歉意,但它相当具体。如果您需要任何澄清,请询问。

请记住,我是一个菜鸟,所以我很容易犯一些非常愚蠢的错误。

0 投票
2 回答
3974 浏览

ruby-on-rails - 如何将数组传递给 Rails 中的 fields_for?

我想fields_for在关联中的记录子集上使用。

我有一个Month模型,它has_many :payments

但在我看来,我只想获得fields_for其中的一些付款。例如:

这行不通。

我可以将一组记录传递给fields_for,而不是通常的符号 ( fields_for :payments) 方法吗?

0 投票
1 回答
102 浏览

ruby-on-rails - rails 处理单个和多个返回的对象

在 Rails 中,您可以使用 .each do || 循环查询返回的结果。但是如果只返回一行呢?或者你有0、1或许多的可能性?您如何处理这些情况而不会引发错误?

这种情况尤其是我在 ryan 的 railcast 博客 ( http://railscasts.com/episodes/196-nested-model-form-part-1 )之后接受嵌套属性的情况

我可以返回 1 个或多个嵌套项,然后我需要循环并编写 XML 表单。

0 投票
2 回答
1542 浏览

ruby-on-rails - 嵌套表单 - 如何根据子模型的输入验证父模型?

有嵌套形式,关系是这样的

我在 Inspection 中有一个自定义验证方法,它取决于为 InspectionComponent 输入的属性。如何验证 - InspectionComponent 属性未保存或在检查验证中可用。

谢谢!

编辑:为了让事情更清楚一点,这是我正在尝试做的一个例子。

检查具有属性状态。InspectionComponent 也有一个属性 status。

检查编辑表单具有嵌套的检查组件,可以在此表单上更新每个模型的状态。如果所有@inspection_component.status == '完成',@inspection.status 应该只能被标记为'完成'。

因此,在验证@inspection 时,我必须能够看到用户为@inspection_component.status 输入的内容。

显然,我可以访问控制器中两个实例的参数,但是在应该进行验证的模型中,我看不到实现这一点的方法。

希望这很清楚,谢谢。

0 投票
1 回答
8611 浏览

ruby-on-rails - 使用 accept_nested_attributes_for 创建新记录或更新现有记录

阅读重大更新以获取最新信息。

嘿大家,

我在一个涉及三个表的 Rails 应用程序中有一个多对多关系:一个用户表、一个兴趣表和一个连接 user_interests 表,该表也有一个评分值,因此用户可以对他们的每个兴趣进行评分1-10 级。

我基本上是在寻找一种方法,让新用户在注册时创建他们的评级,并在未来日期同时编辑他们的任何个人资料信息。

我试图通过 has_many 来关注这个问题 Rails nested form :through, how to edit attributes of join model? 但我遇到的问题是尝试将选择列表合并到组合中,并为用户评分多个兴趣。

型号代码:

查看代码:

我还在控制器的新/编辑操作中包含以下内容@user.interests.build.build_interest

我遇到的问题是,当我想要多个时,参数哈希中只传递了一个利率等级。我也得到了rails抛出的异常

我遗漏了哪些微小的细节或弄错了导致问题的原因?

编辑:

我找到了一种强制它工作的方法,但它需要在 chrome 开发人员工具中手动编辑 HTML,我的表单元素的 :name 属性正在生成,user[user_interests_attributes][rating]但如果我将其更改为user[user_interests_attributes][][rating]它将在我更新记录时工作。但是,我无法手动指定绑定到表单对象的表单元素的 :name。那么我能做些什么来证明正在通过多个利率评级,而不是 Rails 认为的一个?

大更新:

我得到了一个半功能版本,有一些细微的变化:

查看代码:

控制器代码:

现在,如果不存在评分,我可以编辑并更新或创建我的 user_interests,但是当我尝试创建新用户时,我收到一个错误,即用户为空。此外,我无法访问表单中的任何兴趣属性来显示用户实际评分的兴趣。任何人都可以帮助解决这些警告吗?

0 投票
2 回答
16476 浏览

ruby-on-rails - Using Formtastic's semantic_fields_for with a has_many association

I am trying to create a nested form using formtastic. I've included my code below but am running into some problems that I've also listed below. Any suggestions? Thanks.

  1. A default user is created when a Home is saved. How do I have the form display only the newly created records and not the existing one?

  2. If #1 isn't possible, how do I make the existing record update? I have update_only set on the accepts_nested_attributes_for, but a new record is still created.

  3. I am doing 2.times{ @home.home_members.build } in the controller action. When I print the size of @home.home_members I get 3 (one already exists) as expected. Why is the form only displaying 2 sets of inputs, one being populated with the existing home_member data?