【问题标题】:How to save data to multiple tables in RailsRails 如何将数据保存到多个表中
【发布时间】:2018-12-25 11:29:29
【问题描述】:

我在我的应用程序中使用 Devise 进行身份验证,并获得了一个名为“用户”的模型。我为公司信息创建了另一个模型。我使用引用生成了迁移,一切正常。

我想在同一个注册视图中将用户信息添加到用户表和公司信息到公司表。

此外,用户表和公司表都具有与“名称”相同的字段。

我尝试将其指定为 ;

<%= f.text_field :company["name"], autocomplete: "company_name" %>

<%= f.text_field :company[:name], autocomplete: "company_name" %>

<%= f.text_field :companies[:name], autocomplete: "company_name" %>

我得到了错误;

undefined method `' for #<User:0x00007fd5588cb588>

no implicit conversion of Symbol into Integer

我认为我应该以某种方式覆盖 devise_controller,但我想了解这类情况的一般做法。

总结:我想将数据保存到数据库中具有相同列名的不同表中。

【问题讨论】:

  • 用户和公司之间有什么关联?请在问题中添加模型代码。以及整个表单代码 - 目前还不清楚您尝试创建什么以及何时创建
  • 我的用户表中有一个 company_id 字段。

标签: ruby-on-rails activerecord devise


【解决方案1】:

假设user belongs_to company 并且您想从一个表单提交中保存用户及其关联公司,您可以为此使用fields_for

<%= f.fields_for :company do |cf| %>
  <%= cf.text_field :name %>
<% end %>

这需要用户中的accepts_nested_attributes_for :company

【讨论】:

  • 谢谢。我明白了主要想法,但我只需要一个提交按钮。
  • @Zogimu:是的,这个解决方案就是这样做的
  • 所以我不需要 cf.submit 按钮?
  • @Zogimu:不,你没有。阅读 fields_for/accepts_nested_attributes_for。好东西。
  • 好的,将&lt;%= f.fields_for :company 更改为&lt;%= f.fields_for :company_attributes 并允许使用 devise_parameter_sanitizer 的 company_attributes 解决了渲染问题。它不作为公司工作,但是当我将其更改为 company_attributes 时,它可以工作。奇怪
猜你喜欢
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多