Контекст Я не могу ухватиться за следующее:
- Между пользователем и гостиницей существует множество отношений через объединяющуюся таблицу User_Hotel.
- Пользователь, созданный с помощью devise, имеет роль администратора
- Пользователь с ролью администратора может создать множество отелей
- Пользователь с ролью администратора должен иметь возможность приглашать других пользователей в конкретную гостиницу (например,не все его отели). Я использую драгоценный камень, предназначенный для разработки, для отправки приглашений.
Проблемы Я настроил свои маршруты, модели и контроллер для пользователей / приглашений, но что-то не так:
- , поскольку мои параметры hotel_id не совпадаютотправлено правильно на мой invitations_controller. См. Сообщение об ошибке:
Couldn't find Hotel without an ID. params sent: {"format"=>"109"}
- Я не уверен, должен ли / как создать соединения между этим конкретным отелем и приглашенным пользователем?
просмотров / отелей / шоу
<%= link_to "invite new user", new_user_invitation_path(@hotel) %>
маршруты
Rails.application.routes.draw do
devise_for :users, controllers: {
invitations: 'users/invitations'
}
resources :hotels do
resources :users
end
end
модели
class User < ApplicationRecord
has_many :user_hotels, dependent: :destroy
has_many :hotels, through: :user_hotels
enum role: [:owner, :admin, :employee]
after_initialize :set_default_role, :if => :new_record?
def set_default_role
self.role ||= :admin
end
devise :invitable, :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, :invitable
end
class UserHotel < ApplicationRecord
belongs_to :hotel
belongs_to :user
end
class Hotel < ApplicationRecord
has_many :user_hotels, dependent: :destroy
has_many :users, through: :user_hotels
accepts_nested_attributes_for :users, allow_destroy: true, reject_if: ->(attrs) { attrs['email'].blank? || attrs['role'].blank?}
end
контроллеры / пользователи / приглашения
class Users::InvitationsController < Devise::InvitationsController
def new
@hotel = Hotel.find(params[:hotel_id])
@user = User.new
How to build the join table UserHotel when inviting?
end
end