use*_*174 2 random ruby-on-rails faker ruby-on-rails-4
我正在尝试使用 Rails Faker gem 生成唯一的产品名称,以在数据库中创建示例项目模型。我已经多次使用 Faker,但由于某种原因我无法生成新的产品名称。我已经创建了 nameMaker 函数来避免可能的早期重复,但在一次插入后我就得到了一条记录失效。有谁知道我该如何解决这个问题?
种子.rb:
98.times do |n|
name = Item.nameMaker
description = Faker::Lorem.sentence(1)
price = Item.priceMaker
item = Item.create!(
name: name,
description: description,
price: price)
end
Run Code Online (Sandbox Code Playgroud)
项目.rb:
class Item < ActiveRecord::Base
validates :name, presence: true, length: { maximum: 100 }
validates :description, presence: true,
length: { maximum: 1000 }
VALID_PRICE_REGEX = /\A\d+(?:\.\d{0,3})?\z/
validates :price, presence: true,
:format => { with: VALID_PRICE_REGEX },
:numericality => {:greater_than => 0}
validates_uniqueness_of :name
def Item.nameMaker
loop do
name = Item.newName
break if Item.find_by(name: name).nil?
end
return name
end
def Item.newName
Faker::Commerce.product_name
end
end
Run Code Online (Sandbox Code Playgroud)
要获得唯一的name,请将伪造者括在括号中。例如
name { Faker::Commerce.product_name }
Run Code Online (Sandbox Code Playgroud)
为了实现这一点,你还可以利用工厂女孩,当你想创建 98 种不同的物品时,你可以有类似的东西
factories/item.rb
FactoryGirl.define do
factory :item do
name { Faker::Commerce.product_name }
description { Faker::Lorem.sentence(1) }
price Faker::Commerce.price
end
end
Run Code Online (Sandbox Code Playgroud)
在你的规范文件中
let(:item) { create_list(:item, 98) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2777 次 |
| 最近记录: |