【发布时间】:2018-10-24 16:52:35
【问题描述】:
我不确定为什么会发生这种情况,但我正在尝试使用 Company 和 URLs 模型创建嵌套属性。
这是我所拥有的:
# 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},
...
【问题讨论】:
-
可以在调用
company.save之后添加company.errors的输出吗 -
我尝试复制它并且它工作正常。请尝试调用
company.save!,因为如果记录无效,它将引发错误。 -
AFAIK
company.urls.build采用哈希(url 对象),而不是哈希数组。 -
@adbeel
.new, .build, .create等都采用哈希数组。这会同时创建/初始化多个记录。 “属性参数可以是哈希或哈希数组。这些哈希描述了要创建的对象的属性。” api.rubyonrails.org/classes/ActiveRecord/Persistence/… -
我有一个错字。 FML。我把它修好了。非常感谢大家!!!
标签: ruby-on-rails activerecord model attributes