Rails 5 - Сохранение абсолютного текущего URL через кнопку в cookie? - PullRequest
0 голосов
/ 02 ноября 2018

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

Я считаю, что делать это с помощью cookie-файлов - лучший способ?

Вот что я пробовал:

просмотр домашней страницы:

<%= link_to "Return to your last question", cookies[:saved_url], :class => "button is-info" %>

контроллер:

def resume
  cookies.permanent[:saved_url] = request.original_url
  redirect_to :saved_url
end

вид:

<%= link_to 'Save Progress', users_resume_path, method: :post %>

маршрут:

post 'users/resume'

РЕДАКТИРОВАТЬ: все это происходит в рамках пользовательского метода

  def tagged
    @mcqs = MultipleChoiceQuestion.with_tag(params[:tag]).order("created_at DESC").published.paginate(:page => params[:page], :per_page => 1)
    authorize @mcqs

    cookies.permanent[:saved_url] = request.original_url

 end

Моя проблема в том, что я не могу использовать iVar, который был предложен в новом пользовательском методе, поэтому добавление другого метода, похоже, не работает

1 Ответ

0 голосов
/ 02 ноября 2018

Вот как бы я это решил.

1. Добавить привязку current_question к пользователю:

class AddCurrentQuestionToUser < ActiveRecord::Migration[5.2]
  def change
    add_reference :users, :current_question, foreign_key: { to_table: :questions }
  end
end

class User < ApplicationRecord
  belongs_to :current_question, class_name: 'Question'
end

2. создать маршрут, который помечается как вопрос как текущий вопрос.

Я предполагаю, что у вас есть метод current_user.

# config/routes.rb
resources :questions do
  patch :current
end

class QuestionsController
  # PATCH /questions/:id/current
  def current
    @question = Question.find(params[:id])
    if current_user.update(current_question: @question)
      redirect_to @question, success: 'Current question updated.'
    else
      redirect_to @question, error: 'Could not update question.'
    end
  end
end

Вы можете создать кнопку, чтобы обновить это:

<%= button_to 'Save question', question_current_path(@question), method: :patch %>

Если вы хотите добавить ссылку на текущий вопрос пользователя, вы можете сделать это:

<%= link_to "Resume", current_user.current_question %>

Весь шаг перенаправления полностью избыточен.

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