Используя ваш текущий код, установка id_watch
может быть выполнена здесь, в контроллере:
class FolusersController < ApplicationController
def create
@foluser = current_master.folusers.build(foluser_params)
@foluser.id_watch = current_master.id_watch # <-- !!!
respond_to do |format|
if @foluser.save
# ...
end
end
end
end
Несмотря на наш расширенный разговор выше, мне все еще неясно, чего вы пытаетесь достичь с помощью «генерации пароля».
(Должно ли оно быть сгенерировано во внешнем интерфейсе или во внутреннем интерфейсе? Должно ли оно храниться в зашифрованном виде или в виде простого текста? Если оно зашифровано, нужно ли иметь возможность отменить это шифрование? Это «постоянный» "пароль или" временный "пароль? ...)
Следовательно, следующий код должен быть взят с большой долей соли - поскольку я до сих пор не знаю, что такое желаемое / правильное поведение.
В FolusersController
вы определили следующий метод:
def foluser_params
params.require(:foluser).permit(:name, :email, :numberphone, :password)
end
Однако, если вы хотите, чтобы пароль был сгенерирован сервером, вам не следует разрешать admin
устанавливать пароль через контроллер. Поэтому удалите этот параметр:
def foluser_params
params.require(:foluser).permit(:name, :email, :numberphone)
end
А потом где-нибудь - возможно, в контроллере или в качестве хука в модели - установите этот пароль на что-то случайное:
class FolusersController < ApplicationController
def create
@foluser = current_master.folusers.build(foluser_params)
@foluser.password = SecureRandom.hex(10 + rand(6))
# ...
end
end
# or
class Foluser < ApplicationRecord
after_initialize :default_password
def default_password
self.password ||= SecureRandom.hex(10 + rand(6))
end
end