Могу ли я сделать только один маршрут, чтобы получить какую-либо информацию о моем объекте модели, передающем строки или объекты json? - PullRequest
0 голосов
/ 14 декабря 2018

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

Например: если я получаю доступ к URL-адресу, передавая строку с именем «name» и «id», он должен вернуть «имя» объекта, если я передам «email» и «id», ондолжен вернуть «адрес электронной почты» объекта.

Примерно так:

get "person/" => "persons/any_info_about" # host/persons?name"

Есть ли способ использовать только один маршрут для получения информации, основанной на моих параметрах?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вы не должны передавать произвольные имена параметров в конечную точку, например

GET /person/12345?name,email,foo,bar

, потому что тогда будет сложно узнать, какой параметр проверять.Вместо этого ожидайте что-то вроде

GET /person/12345?fields=name,email,foo,bar

(имя параметра "fields", значение параметра "name,email,foo,bar").

Затем в контроллере:

def show
  fields = params[:fields].try { |value| value.split(',') }
  @person = ...
  @data = @person.attributes.slice(*fields)
end
0 голосов
/ 14 декабря 2018

Да.Не упоминайте конкретные имена параметров в маршруте.Просто укажите модель и название действия:

get "person" => "person#everything"

И позаботьтесь о параметрах в методе действия:

model PersonsController < ApplicationController
  def everything
    if params[:id] && params[:name]
      ...
    end
    if params[:id] && params[:email]
      ...
    end
    ...
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...