Rails 5.1 API - индексный метод с фильтрами, нумерацией страниц и областями действия - как упростить

У меня был случай, когда я случайно начал разворачивать каталог файлов в корне. Он добавил файл .htaccess из моей папки с файлами, который блокирует все php

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

. Нижняя строка проверяет файл .htaccess на root.

0
задан rmcsharry 24 March 2019 в 20:23
поделиться

1 ответ

Я бы начал с чего-то вроде этого:

def index
  if params[:page].present?
    @proposals = current_user.retailer.proposals.page(params[:page])

    @proposals = @proposals.customer(params[:customer_id]) if params[:customer_id].present?
    @proposals = @proposals.search(params.slice(:filter))  if params[:filter].present?

    render json: @proposals, root: 'proposals', meta: pagination_dict(@proposals)
  else
    render status: :bad_request, json: { message: "Please supply page parameter" }
  end
end

Кроме того, вы можете обработать ошибку в before_action:

before_action :check_required_parameters, only: :index

def index
  @proposals = current_user.retailer.proposals.page(params[:page])

  @proposals = @proposals.customer(params[:customer_id]) if params[:customer_id].present?
  @proposals = @proposals.search(params.slice(:filter))  if params[:filter].present?

  render json: @proposals, root: 'proposals', meta: pagination_dict(@proposals)
end

private

def check_required_parameters
  return if params[:page].present?

  render status: :bad_request, json: { message: "Please supply page parameter" }
end

Области для обработки пустых значений:

# in the model
scope :filter, -> (term) { where("lower(first_name) || ' ' || lower(last_name) || ' ' || lower(email) LIKE ? OR qd_number::text LIKE ?", "%#{term.downcase}%", "%#{term}%") if term.present? }  
scope :customer, -> (customer_id) { where(customer_id: customer_id) if customer_id.present? }

# in the controller
def index
  if params[:page].present?
    @proposals = current_user.retailer.proposals
      .customer(params[:customer_id])
      .search(params.slice(:filter))
      .page(params[:page])

    render json: @proposals, root: 'proposals', meta: pagination_dict(@proposals)
  else
    render status: :bad_request, json: { message: "Please supply page parameter" }
  end
end
0
ответ дан spickermann 24 March 2019 в 20:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: