Es gibt zwei Modelle:Ausgabe mit Prüfzeiten überlappt
# Table name: activities_people
#
# activity_id :integer not null
# person_id :integer not null
# date :date not null
# id :integer not null, primary key
# == Schema Information
#
# Table name: activities
#
# id :integer not null, primary key
# name :string(20) not null
# description :text
# active :boolean not null
# day_of_week :string(20) not null
# start_on :time not null
# end_on :time not null
Relations: activity.rb
has_many :activities_people
has_many :people, through: :activities_people
activity_people.rb
belongs_to :person
belongs_to :activity
Ich versuche Validierung zu erstellen, die Person kann zu einer Aktivität hinzukommen, die an einem bestimmten Datum und zu einer bestimmten Uhrzeit stattfindet (start_on, end_on). Wenn ich versuche, mich zu einer anderen Aktivität anzumelden, bevor ich mich anderen Übungen angeschlossen habe (dasselbe Datum und Zeiten, die sich überschneiden), sollte der Fehler ausgelöst werden. Was ich versuche:
def check_join_client
activities_date = person.activities_people.where('date = date', date: date)
if activities_date.exists && person.activities.where('id IN (?)', activities_date)
end
Ich weiß nicht, wie Abfrage erstellen verwenden (person.activities.where ...) Person Aktivitäten mit activies_people Bezug zu bekommen. activities_date überprüft, ob wir uns Aktivitäten angeschlossen haben, die am selben Tag stattfinden. Zweitens möchte ich check start_on und end_on bekommen. Vielen Dank im Voraus.
Einfache Möglichkeit zu tun "where in" ist ein Array zur Verfügung stellen: dh 'User.where (id: [1,2,3])' –
@maxpleaner ok Ich verstehe, aber wie man person.activities id überprüfen (Aktivität ID nicht Person) ist Inactivities_Date Ergebnis? –