У меня есть раздел отзывов, который позволяет пользователю написать отзыв о другом пользователе после их встречи. Я хочу разрешить пользователям писать обзоры после start_time их встречи.
Проблема, с которой я сталкиваюсь, заключается в том, что сразу после создания встречи между двумя пользователями пользователям разрешается писать обзоры друг для друга до начала их встречи. Метод, который я создал finished_meetup?
, все время читается как true. Я думаю, это связано с тем, что мое start_time отображается неправильно.
В консоли, если я бронирую встречу на 20:30, я получаю следующее как start_time start_time: "2000-01-01 20:30:00"
. Дата привязана ко времени и не может быть удалена, потому что "представляет время без дата рубиновым шрифтом".
Как мне настроить метод finished_meetup?
, чтобы обзоры проводились после встречи, а не заранее.
схема.rb:
create_table "user_meetups", force: true do |t|
t.integer "user_id"
t.integer "friend_id"
t.string "state"
t.datetime "created_at"
t.datetime "updated_at"
t.date "start_date"
t.time "start_time"
пользователь.rb
def find_corresponding_friend_id(friend_id)
self.user_meetups.where(friend_id:friend_id).present?
end
def already_reviewed
self.reviews.map{|d| d.review_writer_id}
end
def finished_meetup?
user_meetups.where("start_time < ?", Time.new("2000/#{Time.now.strftime("%m/%d")}"))
end
пользователи/show.html.erb
<% if @user.find_corresponding_friend_id(current_user.id) && @user.already_reviewed.empty? && @user.finished_meetup? %>
user_meetup.rb
class UserMeetup < ActiveRecord::Base
belongs_to :user
belongs_to :friend, class_name: 'User', foreign_key: 'friend_id'
validates :start_date, :start_time, presence: true
# attr_accessor :user, :friend, :user_id, :friend_id, :state
after_destroy :delete_mutual_meetup!
state_machine :state, initial: :pending do
after_transition on: :accept, do: [:accept_mutual_meetup!]
after_transition on: :block, do: [:block_mutual_meetup!]
after_transition on: :unblock, do: [:accept_mutual_meetup!]
state :requested
state :blocked
event :accept do
transition any => :accepted
end
event :block do
transition any => :blocked
end
event :unblock do
transition any => :accepted
end
end
def self.request(start_date, start_time, location, description, learners, user1, user2)
transaction do
# Rails.logger.info "user1 is #{user1.inspect}"
# Rails.logger.info "user2 is #{user2.inspect}"
meetup1 = UserMeetup.create!(start_date: start_date, start_time: start_time, user: user1, friend: user2, state: 'pending')
# Rails.logger.info "meetup1 is #{meetup1.inspect}"
meetup2 = UserMeetup.create!(start_date: start_date, start_time: start_time, user: user2, friend: user1, state: 'requested' )
# meetup1.send_request_email
# meetup1
end
end
t.datetime 'start_at'
? Затем вы можете просто сравнить его с текущей датой и временем, чтобы узнать, разрешено ли это. - person Nick Veys   schedule 12.12.2014start_date
иstart_time
не связаны друг с другом? Получает ли встреча, которая состоится завтра в 16:00 (без учета часовых поясов), запись в таблице сstart_date
, установленным на2014-12-12
, и start_time на16:00
? - person Nick Veys   schedule 12.12.2014finished_meetup?
возвращать true/false? Или вы пытаетесь собрать коллекцию готовых митапов? Вот такая логика... - person Nick Veys   schedule 12.12.2014