Rails возвращает рано, если сбой набора атрибутов before_action - PullRequest
0 голосов
/ 20 мая 2018

Я хотел бы выполнить поиск в БД, используя входящий запрос remote_ip, прежде чем будет применен какой-либо метод контроллера, чтобы установить конкретный атрибут класса контроллера.Однако, если поиск не удается (если ни один объект не связан с IP-адресом запроса), я хотел бы немедленно вернуть ответ 404.

Например:

class Controller < ApplicationController
   before_action :set_instance_or_404

   def index
     # do something with @instance
   end

   private
     def set_instance_or_404
       @instance = Model.find_by(ip_address: request.remote_ip)
       # or if no instance is found, immediately return a 404 without hitting "index" method (or any other method for that matter)
     end
end

Любая помощь будетс благодарностью!

1 Ответ

0 голосов
/ 20 мая 2018

Вы можете вызвать исключение ActiveRecord::RecordNotFound, которое остановит действие и вернуть 404. Или вы можете render или redirect, которое также остановит действие.См. Rails Filters docs.Вот примеры каждого.

class Controller < ApplicationController
  before_action :set_instance_or_404

  def index
    # do something with @instance
  end

  private
    def set_instance_or_404
      @instance = Model.find_by(ip_address: request.remote_ip)
      raise ActiveRecord::RecordNotFound unless @instance # returns 404
    end
end

class Controller < ApplicationController
  before_action :set_instance_or_404

  def index
    # do something with @instance
  end

  private
    def set_instance_or_404
      @instance = Model.find_by(ip_address: request.remote_ip)
      render(status: 404, inline: "Instance not found") unless @instance 
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...