Rails — попытка установить файлы cookie из действия создания

#ruby-on-rails #ruby #string #cookies

#ruby-on-rails #ruby #строка #файлы cookie

Вопрос:

Я пытаюсь установить файлы cookie для пользователей, которые не вошли в систему при создании действия формы. Как только пользователь, не вошедший в систему, нажимает submit, он перенаправляется на действие входа / регистрации, где затем он возвращается на страницу, на которой он был ранее, и форма автоматически заполняется их ранее введенной информацией.

Я успешно добавил файлы cookie, и они сохраняются, но они возвращают странный строковый объект.

 "{"1"=>"This is a test answer"}" # 1 is the question_id and 'This is a test answer' is the answer_text
 

Вот действие создания, в котором я устанавливаю файлы cookie:

 def create 
  store_location  

 if current_user.nil?
   cookies[:answer_entry] = { :value => params[:answers] }
   # raise p cookies[:answer_entry].inspect 
   deny_access
 else 
   params[:answers].each do |question_id, answer_text|
     next if answer_text.blank?
     question = Question.find(question_id)
     question.answers.create!(:answer => answer_text, :user_id => current_user )
     raise p question.answer
     redirect_to book_questions_path(@book), :notice => "You have successfully submitted your Answer, please answer more!"
   end
  end 
end
 

Затем я сохраняю файлы cookie в переменной экземпляра в действии show (где появляется форма), а затем передаю переменную в качестве значения в форме:

 def show
  @book = Book.find(params[:book_id]) 
  @question = @book.questions.find(params[:id])

  if user_signed_in?
    @answer = cookies[:answer_entry]
  else
   cookies[:answer_entry] = nil 
  end
end 
 

И

 <%= form_for(:answer, :url => book_question_answers_path(@book, @question)) do |f| %>
  <%= text_area_tag "answers[#{@question.id}]", @answer%>
  <%= f.hidden_field :user_id, :value => @current_user %> 
  <%= submit_tag("Submit") %>
<% end %>
 

И из этого я получаю эту странную строку, автоматически заполняющуюся в поле формы.

У меня есть два вопроса:

  1. Я понимаю, что это строка «{«1″=>» Это тестовый ответ «}» Но может ли кто-нибудь объяснить, почему внутри есть хэш и почему двойные кавычки экранируются?
  2. Я хочу отобразить ТОЛЬКО текст ответа («это тестовый ответ») в поле формы, может кто-нибудь указать мне правильное направление для решения этой проблемы? Должен ли я разделить строку и переназначить ее как хэш, а затем вызвать параметры:answer_text ?

Я ценю любую помощь.

Спасибо!

Ответ №1:

Вы сохраняете хэш в cookies[:answer_entry], поэтому, когда вы извлекаете его и сохраняете в переменной экземпляра @answer, вы получаете обратно хэш, и когда вы используете его в text_area_tag, он отображается в виде строки.

Есть несколько способов решить эту проблему

Способ первый

В действии create присвоите cookies[:answer_entry] следующим образом

 cookies[:answer_entry] = params[:answers]
 

Способ второй

В show action извлеките значение из cookies[:answer_entry] следующим образом

 @answer = cookies[:answer_entry][:value]
 

Комментарии:

1. Спасибо за быстрый ответ, но когда я делаю первый способ, я получаю: undefined method symbolize_keys!’ для {«1″=>»asdadad»}:ActiveSupport::HashWithIndifferentAccess` и со вторым способом я получаю: can't convert Symbol into Integer . Должен ли я что-то изменить в представлении?