问题标签 [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.
ruby-on-rails - Rails 5 - 嵌套属性的强参数
我在为模型Request构建嵌套属性时遇到问题。
从我的 POST 操作中以正确的方式传递数据。
我错过了什么将这些参数列入白名单?
感谢任何帮助。
控制台输出
应用程序/模型/request.rb
应用程序/模型/drink.rb
应用程序/模型/request_drink.rb
应用程序/控制器/request_controller.rb
app/views/requests/_form.html.erb
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”做这种事情的方式,但我想在转向更混乱的解决方法之前将这个想法发布到社区。
任何意见是极大的赞赏。感谢您的时间。
要求的型号代码:
ruby-on-rails - Rails API 嵌套属性中不允许的参数
我正在尝试使用嵌套字段更新对象并收到Unpermitted parameters
错误消息。导致错误的字段本身就是与嵌套表中另一个表的关系。以下是具体情况:
博士班
专业执照等级
国家级
医生控制器
来自 UI 的调用如下所示:
当我发送呼叫时,记录正在更新并创建许可证。但是,由于控制器说,许可证在没有状态的情况下创建Unpermitted parameters: state
。我尝试了不同的方法,但找不到允许状态的方法。请帮忙!
ruby-on-rails - 如何使用回形针将参数传递给rails 5中fields_for表单中的嵌套属性
一个属性有多个图片。表单中上传的图像应该可以通过 Property 类访问。
提交表单时收到错误:图片属性必须存在
ruby-on-rails - Rails 5 with Devise - 设计用户 has_one 登录
我正在为现有数据库制作网站。该数据库来自游戏,我无法对现有表进行很多更改。
我决定使用 Devise 作为身份验证解决方案。我将使用来自 Devise 的用户模型作为网站,并且数据库有一个包含一些重要信息的登录表。
它们将具有一对一的关联,其中用户 has_one 登录和登录属于用户。
我更改了用户注册表单以获取一些登录信息。我为此使用了嵌套形式。当我注册时,它应该创建用户和登录。
我正在尝试这个创建部分,但它不起作用。我尝试了许多不同的方法,但它从来没有奏效。两个主要问题是:
- 它创建用户但不创建登录
- 它创建了两者,但登录没有我在表单中输入的信息。它们都是空白的
我尝试了很多不同的方法:
- 使用 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
. 我应该怎么做才能纠正这个?
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 没有更新,我现在已经删除了我不想删除的所有公司。
必须有一个更理智的方法来做到这一点......对吧?
ruby-on-rails - Rails 4如何检查嵌套属性_destroy标志是否从模型中设置
我有模型(容器),它接受嵌套属性(包括allow_destroy
)has_one
与另一个模型(reuse_request)的关系。如果在同一更新中将要销毁reuse_request,则容器模型中有一个before_validation
我不想运行的回调。
有没有办法检查_destroy
属性是否已从容器模型before_validation
回调中传递?
ruby-on-rails - 接受带有 jsonb 和变量键的嵌套属性安全参数
我试图允许参数通过我的控制器来获取data
type 的属性,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..必须有更好的方法。
ruby-on-rails - 参数缺失或值为空:task. 如何在渲染视图以创建项目的同时添加“待办事项”?
我希望当用户创建项目时,他/她也可以向其中添加新任务。我已经想出了这个“解决方案”,并且遇到了这个我无法解决的错误。
我什至不知道我将任务操作与项目控制器混合在一起是“红宝石正确的”。我采用这种方法的原因是我无法在视图中找到解决方案并保存项目..
这是我的 projects_controler.rb
项目.rb
任务.rb
路线.rb
新的.html.erb
_form.html.erb
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
而没有任何错误。