Я пытаюсь назначить пользователя в отель, когда приглашаю его с помощью драгоценного камня devise_invitable.
В моем приложении администратор может приглашать пользователей. URL-адрес приглашения в порядке, но приглашенный пользователь получает доступ к всем отелям администратора вместо текущего отеля , от которого администратор приглашает их.
отправляемых приглашений (hotel.id = 109)
http://localhost:3000/users/invitation/new.109
маршруты
Rails.application.routes.draw do
devise_for :users
resources :hotels do
resources :users
end
модели
class User < ApplicationRecord
has_many :user_hotels, dependent: :destroy
has_many :hotels, through: :user_hotels
enum role: [:owner, :admin, :employee, :accountant]
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 :hotels, through: :user_hotels
end
users_controller.rb
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
# GET /users/new
def new
@hotel = Hotel.find(params[:hotel_id])
@user = User.new
@user.hotel = @hotel
authorize @user
end
# POST /users
# POST /users.json
def create
@user = User.new(user_params)
@hotel = Hotel.find(params[:hotel_id])
@user.hotel = @hotel
respond_to do |format|
if @user.save
format.html { redirect_to hotel_users_path(@hotel), notice: 'User was successfully created.' }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:email, :role, :hotel_id)
end
end