токен подтверждения автоматически сгенерированный NIL - PullRequest
0 голосов
/ 27 апреля 2020

У меня проблема с автоматически сгенерированным токеном. В модели я генерирую токен автоматически, используя:

class User < ApplicationRecord
  before_create :generate_confirm_token

  def generate_confirm_token
    self.confirm_token = generate_token
  end

  def generate_token
    loop do
      token = SecureRandom.hex(10)
      break token unless User.where(confirm_token: token).exists?
    end
  end

После создания пользователя токен генерируется правильно, но проблема в контроллере:

class Companies::StudentsController < ApplicationController

  def create
    @company = Company.find(params[:company_id])
    @student = @company.students.create(student_params)
     raise @student.inspect
    if @student.save
      StudentMailer.with(student: @student).welcome_email.deliver_now
      redirect_to company_students_path
    else
      render :new
    end
  end

student содержит confirm_token НО в params токен подтверждения пуст.

enter image description here Мне нужен токен в params, потому что в почтовой программе я использую Find_by(params[:confirm_token]).

Вот как я использую confirm_token на мой взгляд. Я предполагаю, что мне нужно confirm_token в params, поэтому я должен иметь его также в виде:

  <%= f.hidden_field :confirm_token %>

1 Ответ

0 голосов
/ 27 апреля 2020

Процесс, который описан выше, в порядке. Вопрос был в почтовике.

student должно быть в почтовой программе, созданной так:

@student = params[:student]

, но я сделал это так:

@student = Student.find_by(confirm_token: :confirm_token)

Что неверно в соответствии с почтовой программой документация:

Любая пара значений ключа, переданная с помощью just, становится параметрами для действия почтовой программы. Таким образом, с (user: @user, account: @ user.account) делает params [: user] и params [: account] доступными в действии почтовой программы. Также как контроллеры имеют параметры.

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