我正在创建一个多选项生成器,可以根据输入数据生成多项选择答案。随机数生成器位于页面的控制器中。在刷新期间调用控制器,因此随机数会发生变化。
我想过将随机数存储在会话中。但即使我想更改输入数据(例如加载新页面),这也会导致所有随机数保持不变。
有没有办法在页面刷新期间阻止控制器操作?或者另一种让随机数在页面刷新时保持不变的简单方法,但在加载新页面时会改变吗?
答案 0 :(得分:2)
根据我的理解,你想要:
然后你可以这样做:
<强> 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 %>
答案 1 :(得分:0)
我认为Cookie对你的问题是个好主意,试试这个例子,在你的控制器中:
def index
cookies[:number] ||= SecureRandom.hex(4)
end
然后在你看来:
<%= cookies[:number] %>
这样做你想要的吗?