进行动态按钮,以便用户每天只邀请一个人



我创建了一个应用程序,用户可以每天邀请某人参加某个小时的培训。我希望当用户已经邀请某人邀请某人时,按钮在其他培训课程中消失,当它参加培训时,他邀请用户按钮"取消邀请"出现。我已经有创建和删除的方法。我需要有关此代码逻辑的帮助。

这些是我的模型(用户,来宾和培训(:

训练.rb

class Training < ApplicationRecord
  has_many :users, through: :bookings
  has_many :bookings
  has_many :guests
end

user.rb

class User < ApplicationRecord
  has_many :trainings, through: :bookings
  has_many :bookings, dependent: :destroy
  has_many :guests, dependent: :destroy
  accepts_nested_attributes_for :guests
end

guest.rb

class Guest < ApplicationRecord
  belongs_to :training
  belongs_to :user
  validates :user_id, presence: true
  validates :training_id, presence: true
  validate :training_not_full?, on: :create 
 end

config routes.rb:

Rails.application.routes.draw do
  root 'static_pages#home'
  get    '/signup',  to: 'users#new'
  get    '/contact', to: 'static_pages#contact'
  get    '/about',   to: 'static_pages#about'
  get    '/login',   to: 'sessions#new'
  post   '/login',   to: 'sessions#create'
  delete '/logout',  to: 'sessions#destroy'

  resources :account_activations, only: [:edit]
  resources :password_resets,     only: [:new, :create, :edit, :update]
  resources :users do
    resources :rms
  end

  resources :trainings do
    resources :guests
    resources :bookings
  end
end

这是我尝试过的逻辑(虽然不起作用(:

<% if current_user.trainings.any? %>
  <%= link_to "Cancel invitation", 
      training_guest_path(@training, @training.guests.where(user: current_user).first), 
      method: :delete, 
      data: { confirm: "Sure??" }, 
      class: "btn btn-primary" %>
<% else %>
  <%= link_to "Invite", new_training_guest_path(current_user), class: "btn btn-primary" %>
<% end %>

创建一个Invitation模型如下:

class CreateInvitations < ActiveRecord::Migration[5.0]
  def change
    create_table :invitations do |t|
      t.string :user_id
      t.string :guest_id
      t.timestamps
    end
  end
end

class Invitation < ApplicationRecord
  belongs_to :user
  has_many :guests
end

,然后检查用户在过去24小时内是否已经邀请了客人:

last_invitation_date = user.invitations.order(:created_at).last.created_at
can_invite = last_invitation_date < DateTime.now - 1.day

相关内容

最新更新