Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何让工厂女孩创建一个日期?_Ruby On Rails_Rspec_Ruby On Rails 4_Factory Bot - Fatal编程技术网

Ruby on rails 如何让工厂女孩创建一个日期?

Ruby on rails 如何让工厂女孩创建一个日期?,ruby-on-rails,rspec,ruby-on-rails-4,factory-bot,Ruby On Rails,Rspec,Ruby On Rails 4,Factory Bot,已更新 我试图让Factory Girl在我的“发布日期”字段中填入一个日期,一个随机日期,坦率地说,现在任何日期都可以,因为我在运行我的项目时不断出现“验证失败:发布日期不能为空”错误。\u pages\u spec.rb 在下面的一些帮助之后,我在factories.rb中找到了他的项目页面,但我现在已经尝试了很多不同的方法 factory :item do sequence(:name) { |n| "Item #{n}" } release_date { rand(

已更新 我试图让Factory Girl在我的“发布日期”字段中填入一个日期,一个随机日期,坦率地说,现在任何日期都可以,因为我在运行我的项目时不断出现“验证失败:发布日期不能为空”错误。\u pages\u spec.rb

在下面的一些帮助之后,我在factories.rb中找到了他的项目页面,但我现在已经尝试了很多不同的方法

  factory :item do
    sequence(:name)  { |n| "Item #{n}" }
    release_date { rand(1..100).days.from_now }
  end
理想情况下,它将是一行,为每个工厂制造的项目实例创建不同的随机日期

发布日期不能为空,因为我的项目模型中有
验证:发布日期,状态:true
。理想情况下,我会在那里进行验证,确保提供的任何日期都是日期,但也接受NIL,因为我不会总是有可用的日期

非常感谢您的帮助。我在网上找不到关于工厂女孩和日期的任何具体信息

模型


这将设置一个从现在到2年后的日期,如果需要,调整参数(或提取方法):

factory :item do
  sequence(:name)  { |n| "Item #{n}" }
  release_date do
    from = Time.now.to_f
    to   = 2.years.from_now.to_f
    Time.at(from + rand * (to - from))
  end
end
gem有一个非常好的方法:

Faker::Date.between(2.days.ago, Date.today) 

release\u date{rand(1..100).days.from\u now}
注意,您可以在
rand
函数中插入任何范围。顺便说一句,我确实阅读了文档并尝试了一些解决方案。问题似乎出在我的验证器上,因为您的解决方案和下面的解决方案都没有通过我的测试。我必须找到一个更好的替代方案来“验证”发布日期,presence:true“因为我相信你们两个都应该工作。谢谢。介意发布你们的模型和测试代码片段吗?我已经编辑了上面的内容。这看起来很好,但仍然是“发布日期不能为空”“错误。非常困惑。我猜这意味着我的问题在别处。我写的工厂是有效的,不能告诉你的验证器为什么抱怨
factory :item do
  sequence(:name)  { |n| "Item #{n}" }
  release_date do
    from = Time.now.to_f
    to   = 2.years.from_now.to_f
    Time.at(from + rand * (to - from))
  end
end
Faker::Date.between(2.days.ago, Date.today)