Я имею в виду, что пользовательская модель od Devise работает для хранения имени пользователя и пароля, а также для управления сеансами.Но я стараюсь связать это с моделью или таблицей, например, с именем Employee.
Наконец, я прочитал Доступные обратные вызовы , но я дезориентирован, и после многих часов тестирования и практики я не нашелКак мне нравится, и у меня есть несколько вопросов:
• Есть ли способ, которым в одной форме вы можете заполнить данные о сотруднике и создать пользователя Devise ?.Только администратор может зарегистрироваться или зарегистрировать сотрудников.Сотрудники не делают этого сами.
• На MVC, где я могу работать, чтобы создать пользователя, выполнить проверки обеих моделей, а также CRUD?.
Этот код работает, но не совсем хорошо, я работаю над ним.
• Форма сотрудника имеет поля, ничего не имеет значения.
app / views / employee / _form.html.erb
<%= form_with(model: @employee, local: true, html: {autocomplete: "off"}) do |form| %>
<div class="field">
<%= form.label :name %>
<%= form.text_field :name %>
</div>
<div class="field">
<%= form.label :email %><br />
<%= form.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
• На контроллере все нормально, CRUD работает.Но я работаю над этим, просто тестирую:
app / controllers / employee_ employee_controller.rb
класс EmployeesController
# GET /employees/new
def new
@employee = Employee.new
end
# GET /employees/1/edit
def edit
end
# POST /employees
# POST /employees.json
def create
@employee = Employee.new(employee_params)
if employee_params[:email].present?
if @employee.new_record?
set_employees_email
end
end
respond_to do |format|
if @employee.save
format.html { redirect_to @employee, notice: 'Employee was successfully created.' }
format.json { render :show, status: :created, location: @employee }
else
format.html { render :new }
format.json { render json: @employee.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /employees/1
# PATCH/PUT /employees/1.json
def update
if employee_params[:email].present?
# if !employee.email.empty?
if @employee.email.persisted?
update_employees_email
end
end
respond_to do |format|
if @employee.update(employee_params)
format.html { redirect_to @employee, notice: 'Employee was successfully updated.' }
format.json { render :show, status: :ok, location: @employee }
else
format.html { render :edit }
format.json { render json: @employee.errors, status: :unprocessable_entity }
end
end
end
[......]
private
# Use callbacks to share common setup or constraints between actions.
def set_employee
@employee = Employee.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def employee_params
params.require(:employee).permit(:name, :description, :email)
end
def set_employees_email?
## Set employee to a Users
@user = User.new
@user.email = employee_params[:email]
@user.teacher = true
@user.school_id = current_user.school_id
@user.password = "password"
unless @user.validate!
redirect_to employess_path, notice: @user.errors.full_messages
flash[:danger] = "Sorry #{@user.errors.full_messages}"
else
@user.save
end
end
def update_employees_email?
## find User to Update
@user = User.where("employee_id = ?", employee_params[:id])
@user.email = employee_params[:email]
@user.skip_email_changed_notification!
unless @user.validate!
redirect_to employess_path, notice: @user.errors.full_messages
flag = false
else
@user.save
flag = true
end
end
end
• И в Моделях user.rb и employee.rb у меня нет ничего о предмете, только проверка электронной почты и другие вещи.Следует отметить, что для каждого сотрудника не обязательно иметь сессионный счет (Пользователь).
Заранее благодарю за помощь, любые рекомендации или необходимые изменения в логике, я ценю это.