问题标签 [accepts-nested-attributes]

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 回答
2149 浏览

ruby-on-rails - Rails 5 - 嵌套属性的强参数

我在为模型Request构建嵌套属性时遇到问题。

从我的 POST 操作中以正确的方式传递数据。

我错过了什么将这些参数列入白名单?

感谢任何帮助。

控制台输出

应用程序/模型/request.rb

应用程序/模型/drink.rb

应用程序/模型/request_drink.rb

应用程序/控制器/request_controller.rb

app/views/requests/_form.html.erb

0 投票
1 回答
474 浏览

ruby-on-rails-5 - Ruby on Rails 5:两个模型之间的双重关联

我已经在这个问题上工作了几天,而我看过的其他 Stack Overflow 帖子要么真的很旧,要么不是我需要的。

问题:

涉及三个模型:

旅行- 代表旅行及其相关信息,注意:不包括任何有关机组人员的信息。

里程碑- 表示在一次旅行中采取的行动(就本问题而言,当船员登船或下船时)。

CrewMember - 代表旅行中的单个机组成员,每个机组成员都有一个登船和下船里程碑,如果他们在同一地点登船或下船,则可以与其他船员共享。CrewMembers 通过他们的 board_milestone_id 和 disembark_milestone_id 链接到里程碑。

现在我正在制作一个表单,用户可以在其中编辑旅行中的所有信息,其中包括旅行中出现的船员、他们的角色以及他们在哪里登船/下船。正在编辑行程,因此整个页面都包含在 form_for 构建器中。

编辑 CrewMembers 的页面部分包含在 fields_for 构建器中。Trips 模型被配置为接受 CrewMember 模型的嵌套属性。船员的数量是可变的,每个人都需要单独编辑他们的信息(所以据我所知,我不能使用 select_tags)。这可以很好地在视图中显示机组成员,但当我实际尝试更新时不起作用,因为 CrewMembers 通过 board_milestone_id 和 disembark_milestone_id 与里程碑相关联,而不仅仅是里程碑_id。

问题:

因此,考虑到所有这些,有没有一种方法可以“教”rails 以从一个行程表中的“里程碑”识别 CrewMembers,无论是登船里程碑 id、下船里程碑 id 还是最好两者兼而有之?

我的印象是,这不是“Rails”做这种事情的方式,但我想在转向更混乱的解决方法之前将这个想法发布到社区。

任何意见是极大的赞赏。感谢您的时间。

要求的型号代码:

0 投票
1 回答
950 浏览

ruby-on-rails - Rails API 嵌套属性中不允许的参数

我正在尝试使用嵌套字段更新对象并收到Unpermitted parameters错误消息。导致错误的字段本身就是与嵌套表中另一个表的关系。以下是具体情况:

博士班

专业执照等级

国家级

医生控制器

来自 UI 的调用如下所示:

当我发送呼叫时,记录正在更新并创建许可证。但是,由于控制器说,许可证在没有状态的情况下创建Unpermitted parameters: state。我尝试了不同的方法,但找不到允许状态的方法。请帮忙!

0 投票
1 回答
657 浏览

ruby-on-rails - 如何使用回形针将参数传递给rails 5中fields_for表单中的嵌套属性

一个属性有多个图片。表单中上传的图像应该可以通过 Property 类访问。

提交表单时收到错误:图片属性必须存在

0 投票
1 回答
199 浏览

ruby-on-rails - Rails 5 with Devise - 设计用户 has_one 登录

我正在为现有数据库制作网站。该数据库来自游戏,我无法对现有表进行很多更改。

我决定使用 Devise 作为身份验证解决方案。我将使用来自 Devise 的用户模型作为网站,并且数据库有一个包含一些重要信息的登录表。

它们将具有一对一的关联,其中用户 has_one 登录和登录属于用户。

我更改了用户注册表单以获取一些登录信息。我为此使用了嵌套形式。当我注册时,它应该创建用户和登录。

我正在尝试这个创建部分,但它不起作用。我尝试了许多不同的方法,但它从来没有奏效。两个主要问题是:

  1. 它创建用户但不创建登录
  2. 它创建了两者,但登录没有我在表单中输入的信息。它们都是空白的

我尝试了很多不同的方法:

  • 使用 resource.build_login 覆盖 RegistrationController 中的新方法
  • 用内部许可覆盖 sign_up_params 方法
  • 将 resource.build_login 放在新视图中
  • 覆盖 build_resource 并将 resource.build_login 放在那里

它们都不起作用。

我正在使用 Rails 5.0.2 和 Devise 4.2.0。

这些是模型:

一个重要的问题是我应该把accept_nested_attributes_for放在哪里?我看到人们在 has_one 模型中使用它,我也看到人们在 has_one 模型中使用它。

这是我的注册控制器:

这是我的观点:

我希望所有需要的信息都在那里。

我为这个问题找到的大多数答案都是针对 Rails 4 或 Rails 3 的,也许它们对我不起作用,因为我使用的是 Rails 5。

编辑#1:在 RegistrationController 中添加了 create 方法。

编辑#2:accepts_nested_attributes_for用户中,字段不会出现,所以我更改accepts_nested_attributes_for为登录模型。

这是代码现在的日志:

是否accepts_nested_attributes_for在正确的模型中?

在日志中有一行指向Unpermitted parameter: login. 我应该怎么做才能纠正这个?

0 投票
1 回答
758 浏览

ruby-on-rails - 我可以在rails中使用accepts_nested_attributes_for删除缺失的关联吗?

TL;博士

这看起来应该很简单。我想设置#accepts_nested_attributes_for,这样当我使用为子类设置的任何非空参数保存父类时,它会删除在参数中没有被其id直接引用的任何其他子类。

出于某种原因,我真的很难找到一种明智的方式来做到这一点。

就是这样。

更长的版本

我有一个模型,承诺:

以及相应的公司模型:

假设我已经将 company_1 (id: 1, name: company_1) 保存在承诺_a 上,然后我调用pledge_.update(params),其中params任何一个都没有引用公司 id,因此:

或(与上述完全相同,但是)为相关公司提供不同的 ID:

指示 Rails 删除任何未包含在参数中的公司的最简单方法是什么,即每次我在嵌套参数中使用任何现有公司调用 #update 时创建一个新集合?

我已经尝试了很多东西:

在 Pledge 上使用 before_save 挂钩删除公司 - 这似乎在保存公司删除它们,所以我总是以无公司的承诺结束

通过将 :reject_if 块添加到 accept_nested_attributes_for 一行然后将其用于 destroy_all_companies after_save 挂钩来构建公司数组 - 这不起作用,因为在某些时候 Rails 似乎重新初始化了承诺,所以到那时我们上钩了,数组消失了

在我调用#update 删除公司之前在控制器中编写一些代码 - 这是我已经减少到的黑客,但它是可怕的。首先,如果我传递不包含任何嵌套公司参数的参数,我并不总是想删除公司。其次,我必须检查参数并删除任何非空的公司#id 值,否则 Rails 在找不到相关公司时会爆炸。第三,如果验证失败并且 Pledge 没有更新,我现在已经删除了我不想删除的所有公司。

必须有一个更理智的方法来做到这一点......对吧?

0 投票
1 回答
888 浏览

ruby-on-rails - Rails 4如何检查嵌套属性_destroy标志是否从模型中设置

我有模型(容器),它接受嵌套属性(包括allow_destroyhas_one与另一个模型(reuse_request)的关系。如果在同一更新中将要销毁reuse_request,则容器模型中有一个before_validation我不想运行的回调。

有没有办法检查_destroy属性是否已从容器模型before_validation回调中传递?

0 投票
1 回答
277 浏览

ruby-on-rails - 接受带有 jsonb 和变量键的嵌套属性安全参数

我试图允许参数通过我的控制器来获取datatype 的属性,jsonb哈希看起来像这样:

我让我的表格开始工作,我可以成功保存数据,但仅限于其中一种语言键。问题正在发生,因为在我的安全参数数组中,我有以下内容:

text_customization_attributes: [:id, data: [es: [:activities_text, :playlists_text, :additional_playlists_text]]]

我需要能够通过这两种语言en:以及将来可能添加的es:任何其他语言。keys我天真地认为可能同时添加上面的行以及 this:text_customization_attributes: [:id, data: [en: [:activities_text, :playlists_text, :additional_playlists_text]]] 会起作用,但是一个会覆盖另一个,并且只有最后一个允许的参数获胜。

有什么想法可以让我同时通过es:en:吗?

先谢谢了!

附录: 我能够通过使用这个来保存整个哈希

但这似乎很hackish..必须有更好的方法。

0 投票
1 回答
67 浏览

ruby-on-rails - 参数缺失或值为空:task. 如何在渲染视图以创建项目的同时添加“待办事项”?

我希望当用户创建项目时,他/她也可以向其中添加新任务。我已经想出了这个“解决方案”,并且遇到了这个我无法解决的错误。

我什至不知道我将任务操作与项目控制器混合在一起是“红宝石正确的”。我采用这种方法的原因是我无法在视图中找到解决方案并保存项目..

这是我的 projects_controler.rb

项目.rb

任务.rb

路线.rb

新的.html.erb

_form.html.erb

0 投票
0 回答
221 浏览

ruby-on-rails - ActiveRecord::RecordNotFound: 使用 Accepts_nested_attributes_for 时找不到 ID= 的 ModelName

例如,我有三个模型类:

我想插入。例如这里是我的代码:

然后这些是准备子属性的方法:

此插入已成功执行。但是当我将插入代码从插入外部移动到accepts_nested_attributes_for仅用于类促销时:

我遇到异常:

ActiveRecord::RecordNotFound: 找不到 ID=123456 的 PromotionSet 用于 ID=999 的 Promotion

我无法解释为什么。而且我不知道为什么这只发生在Promotion类但PromotionSet类可以插入使用accepts_nested_attributes_for而没有任何错误。