Если я использую redirect_to, меня слишком перенаправят в браузер - PullRequest
0 голосов
/ 13 апреля 2020

Моя цель состоит в том, чтобы перенаправить пользователя на index path, если истина, иначе показать new path.

class PostsController < ApplicationController
  before_action :check_condition, only: [:index, :new]

  def check_condition
     if true
        redirect_to posts_path
     else
        redirect_to new_post_path
     end
  end 

  def index
     @posts = Post.find()
  end

  def new
     @new_post = Post.new(title: "test")
  end
end

Я постоянно получаю сообщение об ошибке перенаправления слишком много в браузере, когда я go на индексный путь или новый путь

Ответы [ 4 ]

2 голосов
/ 14 апреля 2020

В данный момент вы перенаправляете на post_path каждый раз, когда условие if выполняется, независимо от того, используете ли вы уже post_path.

Вам нужно только перенаправить, если вы уже не на пути к ожидаемому методу. Это может быть сделано путем проверки текущего action_name:

def check_condition
  if true
    redirect_to posts_path    unless action_name == 'index'
  else
    redirect_to new_post_path unless action_name == 'new'
  end
end 
0 голосов
/ 14 апреля 2020

Попробуйте это. Вы должны вернуться после перенаправления.

def check_condition
  if true
    redirect_to posts_path && return
  else
    redirect_to new_post_path && return
  end
end 
0 голосов
/ 14 апреля 2020

Вы работаете с бесконечным l oop перенаправлений.

Вы добавляете check_condition как before_action. Это означает, что каждый раз, когда вы перенаправляете на index или new страницы, check_condition будет снова запускаться без достижения методов index или new и повторного перенаправления вместо этого и т. Д.

Мое предложение заключается в том, чтобы записывать проверку состояния в методе view или helper (для определения пути ссылки в первую очередь), а не в controller.

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

Извините, но в каком состоянии проверить? Если пользователь залогинен? Я думаю, что ваша проблема, вероятно, слишком много redirect_to. Попробуйте:

def check_condition
     path = condition ? posts_path : new_post_path
     redirect_to path
end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...