FactoryBot ActiveModel :: MissingAttributeError:无法写入未知属性

问题描述 投票:0回答:1

我有四个模型,正在使用SQL Server 2017。

工厂机器人:4.11.1

Rails:5.0.7

电子邮件过滤器将具有子过滤器,该子过滤器将用于发送电子邮件广告系列。然后EmailFilterRecord将存储该广告系列的电子邮件地址。

class EmailFilter < ApplicationRecord
  self.table_name = :Email_Filter
  self.primary_key = :Id

  has_many :email_filter_details, foreign_key: 'Email_Filter_Id', dependent: :destroy
  has_many :email_campaigns, foreign_key: 'email_filter_id'

  accepts_nested_attributes_for :email_filter_details, allow_destroy: true
end

class EmailFilterDetail < ApplicationRecord
  self.table_name = :Email_Filter_Details
  belongs_to :email_filter, primary_key: 'Id'
end

class EmailCampaign < ApplicationRecord
  self.table_name = :Email_Campaign

  belongs_to :email_filter, primary_key: 'Id'
  has_many :email_filter_records, foreign_key: 'email_campaign_id', dependent: :destroy

  accepts_nested_attributes_for :email_filter_records, allow_destroy: true
end

class EmailFilterRecord < ApplicationRecord
  self.table_name = :Email_FilterRecords

  belongs_to :email_campaign
end

工厂:

FactoryBot.define do

  factory :email_filter do
    Name              { 'First Filter' }
    Description       { 'First Filter Description' }

    factory :all_active_mobile_services do
      after(:create) do |email_filter|
        create(:email_filter_detail, email_filter: email_filter)
      end
    end
  end
end

FactoryBot.define do

  factory :email_filter_detail do
    Filter_Type { 'ServiceType' }
    Filter_Value { 'MB' }
  end
end

如果我这样做

create(:all_active_mobile_services)

我收到此错误:

  ActiveModel::MissingAttributeError:
  can't write unknown attribute `email_filter_id`

我在这里想念的是什么?

ruby-on-rails factory-bot
1个回答
0
投票

确定,得到解决方案。我已经在belongs_to :email_filter, foreign_key: 'Email_Filter_Id'模型中添加了email_filter_detail,现在可以使用了。

© www.soinside.com 2019 - 2024. All rights reserved.