Mar*_*ser 6 ruby-on-rails factory-bot
我有以下内容
在/ app/models中:
class Area < ActiveRecord::Base
has_many :locations
end
class Location < ActiveRecord::Base
belongs_to :area
end
Run Code Online (Sandbox Code Playgroud)
在/app/test/factories/areas.rb中
FactoryGirl.define do
factory :area do
name 'Greater Chicago Area'
short_name 'Chicago'
latitude 42
longitude -88
end
factory :losangeles, class: Area do
name 'Los_Angeles Area'
short_name 'Los Angeles'
latitude 50
longitude 90
end
end
Run Code Online (Sandbox Code Playgroud)
在/app/test/factories/locations.rb中
FactoryGirl.define do
factory :location do
name "Oak Lawn"
latitude 34
longitude 35
association :area
end
factory :malibu, class: Location do
name "Malibu"
latitude 60
longitude -40
association :losangeles
end
end
Run Code Online (Sandbox Code Playgroud)
当我尝试运行时,我得到:
NoMethodError: undefined method `losangeles=' for #<Location:0x00000102de1478>
test/unit/venue_test.rb:10:in `block in <class:VenueTest>'
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏.
pja*_*jam 10
您收到此错误是因为您试图向malibu工厂说设置一个名为的关联losangeles,该关联不存在.存在的是losangeles创造一个的工厂Area.你想要的是:
FactoryGirl.define do
factory :location do
name "Oak Lawn"
latitude 34
longitude 35
association :area
end
factory :malibu, class: Location do
name "Malibu"
latitude 60
longitude -40
association :area, factory: :losangeles
end
end
Run Code Online (Sandbox Code Playgroud)
请参阅此处的文档
请注意,您还可以使用嵌套来定义第二个工厂:
FactoryGirl.define do
factory :location do
name "Oak Lawn"
latitude 34
longitude 35
association :area
factory :malibu do
name "Malibu"
latitude 60
longitude -40
association :area, factory: :losangeles
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3004 次 |
| 最近记录: |