- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在做一个项目,我想使用 factory girl 创建测试,但我无法让它与多态 has_many 关联一起工作。我已经尝试了其他文章中提到的许多不同的可能性,但它仍然不起作用。我的模型如下所示:
class Restaurant < ActiveRecord::Base
has_one :address, as: :addressable, dependent: :destroy
has_many :contacts, as: :contactable, dependent: :destroy
accepts_nested_attributes_for :contacts, allow_destroy: true
accepts_nested_attributes_for :address, allow_destroy: true
validates :name, presence: true
#validates :address, presence: true
#validates :contacts, presence: true
end
class Address < ActiveRecord::Base
belongs_to :addressable, polymorphic: true
# other unimportant validations, address is created valid, the problem is not here
end
class Contact < ActiveRecord::Base
belongs_to :contactable, polymorphic: true
# validations ommitted, contacts are created valid
end
所以基本上我想为餐厅创建工厂,其中包含地址和联系人(验证餐厅是否存在,但如果不可能,即使没有它们),但我无法这样做。最终语法应该是这样的:
let(:restaurant) { FactoryGirl.create(:restaurant) }
这还应该创建关联的地址和联系人。我已经阅读了很多文章,但我总是会遇到某种错误。目前我的工厂(序列定义正确)是这样的:
factory :restaurant do
name
# address {FactoryGirl.create(:address, addressable: aaa)}
# contacts {FactoryGirl.create_list(:contact,4, contactable: aaa)}
# Validations are off, so this callback is possible
after(:create) do |rest|
# Rest has ID here
rest.address = create(:restaurant_address, addressable: rest)
rest.contacts = create_list(:contact,4, contactable: rest)
end
end
factory :restaurant_address, class: Address do
# other attributes filled from sequences...
association :addressable, factory: :restaurant
# addressable factory: restaurant
# association(:restaurant)
end
factory :contact do
contact_type
value
association :contactable, :factory => :restaurant
end
有没有一种方法可以在测试中使用一个命令创建带有地址和联系人集的餐厅?由于 after(:create) 回调,我真的需要摆脱我的验证吗?当前状态如下:
我使用的是 factory_girl_rails 4.3.0、ruby 1.9.3 和 rails 4.0.1。我很乐意提供任何帮助。
更新 1:
只是为了阐明我的目标,我希望能够使用一个命令在我的规范中创建餐厅,并能够访问关联的地址和联系人,这些地址和联系人应该在创建餐厅时创建。让我们忽略所有验证(我从一开始就在示例中将它们注释掉了)。当我使用 after(:build) 时,会创建第一家餐厅,然后创建地址,餐厅 ID 为 addressable_id,类名为 addressable_type。联系人也一样,都是正确的。问题是,那家餐厅不知道它们(它没有地址或联系人 ID),我无法从我想访问的餐厅访问它们。
最佳答案
经过真正彻底的搜索,我找到了答案 here - stackoverflow question .This answer也指向这个gist .主要是在 after(:build) 回调中建立关联,然后将它们保存在 after(:create) 回调中。所以它看起来像这样:
factory :restaurant do
name
trait :confirmed do
state 1
end
after(:build) do |restaurant|
restaurant.address = build(:restaurant_address, addressable: restaurant)
restaurant.contacts = build_list(:contact,4, contactable: restaurant)
end
after(:create) do |restaurant|
restaurant.contacts.each { |contact| contact.save! }
restaurant.address.save!
end
end
我的 rspec 中也有一个错误,因为我使用的是 before(:each) 回调而不是 before(:all)。我希望这个解决方案对某人有所帮助。
关于ruby-on-rails - 具有 has_many 和 has_one 的多态关联的 Factory Girl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21270041/
试图为这个问题提出一个 has_one 关联。我有两个表: Ca: :id :serial ... Cert: :id :ca_id :serial ... 给定的 cas
我有以下 Person具有也是另一个 Person 的父级的类。我似乎无法弄清楚如何让关系发挥作用。 class Person 'Person', :primary_key => "mom_id",
对于 has_one关联我可以建立这样的关联: foo.build_bar() 我应该如何构建 has_one, through:协会? 例如: class Foo has_one :bar
这是我的模型: Class Audition belongs_to :video end Class Video has_one :audition end 和我的工厂: Factory.de
我有两个模型,用户和帐户。每个用户可以拥有一个帐户。 为用户创建帐户工作正常。我的问题是,当我尝试更新帐户时,以前的帐户 user_id 无效,并使用 user_id 创建了一个新的帐户行。我不希望这
我有 3 个相关的表/模型。我想检索组织派对的用户,给定一个派对记录,一个带有 bool 值的连接表 organized列和用户表。 迄今为止我最好的尝试(经过多次摆弄后,这对我来说最有意义)。我省略
我们有一个 Company、CompanyUser、User 和 Rating 模型,定义如下: 公司模式 class Company :job) 但这给了我错误,因为 @company.owner
我有一个使用 cocoon gem 的嵌套表单,深度为 5 个类。它们都是belongs_to和has_many,除了具有has_one和belongs_to关联的第二个最嵌套类之外。每当我编辑它时,
我有一个使用 cocoon gem 的嵌套表单,它包含 5 个类的深度。它们都是 belongs_to 和 has_many,除了一个是具有 has_one 和 belongs_to 关联的第二大嵌套
出席和凭单: belongs_to :event belongs_to :account 因此:出勤率和凭单之间是一对一的关系。 有没有办法不用我想太多就可以做到这一点? # attendment h
在组合 has_one 关联和 includes 时,我一直在尝试找出一些奇怪的行为。 class Post { order('comments.id DESC').limit(1) }, clas
Rails 的 has_one 在哪个级别运行? 例子: class User has_one :comment end class Comment belongs_to :user end
文件:User.rb has_one:自行车 文件:Bike.rb belongs_to:用户 这是我在 Bike 和 User 模型中的关系。我的数据库已经包含大量自行车和用户的数据。 如何使用不遵
我正在尝试从 has_one 关联中获取一些信息,但无法获得正确的调用方式。我有 2 个表,一个学生表,其中有一个 emergency_contact。 emergency_contact 表有一个外
我想要关系及其参数的基本语法 我需要这些说明 BELONGS_TO 和 HAS_ONE 的区别? 我想在 CGridView 上使用关系(该关系将另一个表元素称为外键)例如我有三张 table 信使
我刚刚发明了一个愚蠢的小辅助函数: def has_one(seq, predicate=bool): """Return whether there is exactly one item
我有两个模型 Project 和 ProjectPipeline。 我想创建一个项目表单,该表单也包含来自 ProjectPipeline 模型的字段。我已成功创建表单,但是当我点击保存时,值并未存储
我在drivers表中定义了has_one关系 has_one :current_haul 与hauls表关联。 还有 hauls 表和 drivers 表,它们都有 organization_id。
我有一个保存良好的主要对象。现在我在潜在客户和事件之间添加了 has_one 关联。一项事件有一个线索,其中线索具有外键 campaign_id。我的模型中有以下内容: class Campaign
在我的 Rails 应用程序中,我只要求用户在注册时输入电子邮件和姓名,然后让他们选择为他们的个人资料提供更完整的联系方式。因此,我有一个与 Contact.rb 关联的 User.rb 模型,即,
我是一名优秀的程序员,十分优秀!