Devise_invitable, как пригласить пользователей в один отель, а не всех? - PullRequest
0 голосов
/ 31 октября 2019

В контексте, где user.admin has_many hotels, есть ли способ пригласить пользователя только в 1 отель? (например, отношение «многие ко многим» между пользователем и гостиницей с объединением таблицы UserHotel).

Более конкретно, первая проблема, с которой я сталкиваюсь, заключается в том, что я не могу правильно вставить параметр hotel_id в users /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

1 Ответ

0 голосов
/ 31 октября 2019

добавьте этот код к app/models/user.rb:

accepts_nested_attributes_for :user_hotels

, а затем:

User.new(user_hotels_attributes: [{ hotel: @hotel }])

вы можете добавить свои собственные проверки для предотвращения повторяющегося ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...