Ich habe ein Day-Modell, und ein Tag-Modell kann viele time_slots haben.Rails Fabrik Mädchen, wie kann ich eine Fabrik für diesen Satz von zugehörigen Modellen
Der Tag Modell sieht wie folgt aus:
# == Schema Information
#
# Table name: days
#
# id :integer not null, primary key
# schedule_id :integer
# created_at :datetime not null
# updated_at :datetime not null
# wday :integer
#
class Day < ActiveRecord::Base
belongs_to :schedule
has_many :time_slots, :dependent => :destroy
end
Timeslot Modell sieht wie folgt aus:
# == Schema Information
#
# Table name: time_slots
#
# id :integer not null, primary key
# day_id :integer
# created_at :datetime not null
# updated_at :datetime not null
# pin :string
# start_hour :integer
# start_minute :integer
# end_hour :integer
# end_minute :integer
#
class TimeSlot < ActiveRecord::Base
belongs_to :day
has_many :passes, :dependent => :destroy
validates :start_hour, :presence => true
validates :start_minute, :presence => true
validates :end_hour, :presence => true
validates :end_minute, :presence => true
end
ich folgende Fabrik für Tag Zeit haben:
# == Schema Information
#
# Table name: days
#
# id :integer not null, primary key
# schedule_id :integer
# created_at :datetime not null
# updated_at :datetime not null
# wday :integer
#
FactoryGirl.define do
factory :day do
wday rand(0..6)
after(:create) do |day, evaluator|
create_list(:time_slots, 2, day: day,start_hour: generate :start_hour, start_min: generate :start_min, end_hour: generate :end_hour,end_min: generate :end_min)
end
end
sequence :start_hour do |n|
#Needs to return something between 00 and 23
n
end
sequence :start_min do |n|
#Needs to return something between 00 and 55
n
end
sequence :end_hour do |n|
#Needs to return something between 00 and 23 but a value HIGHER than start_hour
#If end_min == start_min
n
end
sequence :end_min do |n|
#Needs to return something between 00 and 55 but a value that is definitely after start_min if end_hour and start_hour are equal
n
end
end
Grundsätzlich - Mein Tag muss time_slots haben, die sinnvoll sind, dh ein Tag könnte das folgende haben, das gültig sein würde :
Timeslot 1
start_hour : 10
start_min : 00
end_hour : 11
end_min : 00
Timeslot 2
start_hour : 11
start_min : 00
end_hour : 12
end_min : 00
Dies würde jedoch keine Gültigkeit als Zeitschlitz 2 mit Zeitschlitz überlappt 1. Ebenso 2 identisch time_slots sind nicht gültig:
Timeslot 1
start_hour : 10
start_min : 00
end_hour : 11
end_min : 00
Timeslot 2
start_hour : 10
start_min : 30
end_hour : 11
end_min : 00
Es scheint Sequenzen der Lage sein, mich hier zu helfen ... das wäre einfach, wenn ich eine 'globale' Menge von Startmins, Startstunden usw. hätte, da ich einfach die nächste aus dem Array auswählen könnte, aber ich weiß nicht, ob das möglich ist oder ob es einen besseren Weg gibt?
Bitte helfen!
also was ist n ... eine Nummer? Erhöht es nicht? Reduziert n-1 n nicht um 1 ... was bedeutet, dass start_hour und end_hour immer noch gleich sein können? Ist n global über alle Sequenzen hinweg so garantiert einzigartig für alle Sequenzgeneratoren? – RenegadeAndy
'n' erhöht sich bei jedem Aufruf von factory_girl wie" create ". –
Also wird jede dieser Sequenzen die gleiche n .... das kann nicht richtig sein? – RenegadeAndy