Devise_invitable, как приглашать пользователей в один отель, а не во все?

В контексте, когда у пользователя user.admin есть_много отелей, есть ли способ пригласить пользователя только в 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

person techquestion    schedule 31.10.2019    source источник
comment
что находится внутри переменной params?   -  person moe zarrinfam    schedule 31.10.2019


Ответы (1)


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

accepts_nested_attributes_for :user_hotels

а потом:

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

вы можете добавить свои собственные проверки, чтобы предотвратить дублирование ввода.

person moe zarrinfam    schedule 31.10.2019
comment
Спасибо за Ваш ответ. Параметры все еще остаются params sent: {"format"=>"109"} Этот дополнительный результат кода app/controllers/users/invitations_controller.rb:5: syntax error, unexpected '}', expecting => ...rks_attributes: {[hotel: @hotel]} ) ... ^ - person techquestion; 31.10.2019
comment
извините, фигурные скобки были в плохом месте - person moe zarrinfam; 31.10.2019
comment
Спасибо за ответ, это приблизило меня на один шаг :) . С User.new(user_hotels_attributes:[{hotel:@hotel}]) я действительно не получаю сообщения об ошибке. Тем не менее, параметры отеля по-прежнему не отправляются должным образом в новое действие (например, {"format"=>"109"} вместо id=>109 ). - person techquestion; 01.11.2019