Rails试图构建嵌套模型但回滚

时间:2018-10-24 16:52:36

标签: ruby-on-rails activerecord model attributes

我不确定为什么会这样,但是我正在尝试使用CompanyURLs模型创建嵌套属性。

这就是我所拥有的:

# app/models/company.rb
class Company < ApplicationRecord
    has_many :urls, dependent: :destroy
end

# app/models/url.rb
class Url < ApplicationRecord
  belongs_to :Company
end

例如,我有这个:

urls = [{:url=>"http://audit.site.com/"},
 {:url=>"http://bidboard.site.com/"},
 {:url=>"http://careers.sit.com/"}]

并且我正在尝试通过执行以下操作来创建一个与这些URL相关联的新公司:

company = Company.new(company_name: @report_data[:company_name], domain: @report_data[:domain])
company.urls.build(urls)
company.save

,我从控制台收到回滚错误,不知道为什么。我相信这应该相对简单。基本上,用户将公司名称提交到此表单并开始该过程。

据我了解,我的迁移记录应该可以。他们在这里:

class CreateCompanies < ActiveRecord::Migration[5.1]
  def change
    create_table :companies do |t|
      t.string :company_name
      t.string :domain

      t.timestamps
    end
  end
end

class CreateUrls < ActiveRecord::Migration[5.1]
  def change
    create_table :urls do |t|
      t.belongs_to :company, foreign_key: true
      t.string :url

      t.timestamps
    end
  end
end

知道我在做什么错吗?

编辑

因此,在致电company.errors之后,我将看到以下内容:

 @base=#<Company:0x00007f71800f0e80 id: nil, company_name: "Random", domain: "random.com", created_at: nil, updated_at: nil>,
 @details=
  {:urls=>
    [{:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     {:error=>:invalid},
     ...

2 个答案:

答案 0 :(得分:1)

使用嵌套属性时,您需要使用inverse_of

基本上,您的关联是这样的:

class Company < ApplicationRecord
    has_many :urls, dependent: :destroy, inverse_of: :company
end

class Url < ApplicationRecord
    belongs_to :company, inverse_of: :urls
end

浏览此link可以更好地了解

我也建议您使用save!来查看失败的原因。

答案 1 :(得分:0)

请发布您的服务器日志,确保您拥有:

  1. 为网址模型添加了一个Foreign_key。
  2. 公司控制器中白名单中的参数。