Сохраняя случайные числа одинаковыми после обновления, Rails - PullRequest
0 голосов
/ 30 апреля 2018

Я создаю генератор множественного выбора, который может генерировать ответы с множественным выбором на основе входных данных. Генераторы случайных чисел находятся в контроллере страницы. Контроллер вызывается во время обновления, и поэтому случайные числа меняются.

Я думал о хранении случайных чисел в сессиях. Но это приведет к тому, что все случайные числа останутся прежними, даже если я захочу изменить свои входные данные (например, загрузить новую страницу).

Есть ли способ заблокировать действие контроллера во время обновления страницы? Или другой простой способ сделать так, чтобы случайные числа оставались неизменными при обновлении страницы, но менялись при загрузке новой страницы?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Из того, что я понял, вы хотите:

  • ЕСЛИ страница перезагружена, случайное число на странице остается прежним
  • Иначе, если изменить / новую страницу, случайное число будет восстановлено

Тогда вы можете сделать что-то вроде:

your_controller.rb:

before_action :set_random_number, only: [:index]

def set_random_number
  message_encryptor = ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base)

  # if no random number yet for this page, then generate, then redirect to same page but now with random_number param
  if params[:random_number].blank?
    # we need to encrypt the random_number so that user won't be able to manipulate the value in the query params
    encrypted_random_number = Base64.urlsafe_encode64(
      message_encryptor.encrypt_and_sign(
        some_code_of_yours_that_generates_the_random_number
      )
    )
    redirect_to request.query_parameters.merge(random_number: encrypted_random_number)

  else
    @random_number = message_encryptor.decrypt_and_verify(
      Base64.urlsafe_decode64(params[:random_number])
    )
  end
end

index.html.erb:

<%= @random_number %>
0 голосов
/ 30 апреля 2018

Я думаю, что куки - хорошая идея для вашей проблемы, попробуйте это в качестве примера, в вашем контроллере:

def index
  cookies[:number] ||= SecureRandom.hex(4)
end

Тогда по вашему мнению:

<%= cookies[:number] %>

Это делает то, что вы хотите?

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