2014-10-18 1 views
0

В моем Rails API/Угловом приложении я хочу иметь возможность искать таблицы Rails с использованием значений полей. В настоящее время у меня этот код работает, что позволяет искать таблицу по адресу электронной почты, и она возвращает запись пользователей как JSON.Запрос Rails произвольным столбцом

API/Контроллеры/users_controller.rb

def query # by email 
    queried_user = User.where(email: params[:email]).first 
    if !queried_user.nil? 
    render json: queried_user, root: false 
    else 
    render json: {error: 'Does not exist'}, status: :not_found 
    end 
end 

конфигурации/routes.rb

get 'api/users/:id/query' => 'api/users#query' 

Пример URL

http://0.0.0.0:8080/api/users/1/[email protected] 

Пример вернулся JSON

{"id":14,"title":"Dr.","first_name":"John","last_name":"Smith","email":"[email protected]","job_title":"Head Bioligist","organisation":"NIH","phone_office":null,"city":null,"country":null,"approved":true,"admin":false,"template":false} 

Это все работает нормально, в настоящее время, но есть две проблемы, я не могу решить.

  1. Я хотел бы URL, чтобы не содержать : идентификатор я нахожу, когда я оставляю идентификатор из URL, Rails обрабатывает запроса параметр, как идентификатор. Я могу заставить его работать с жестким кодированием фальшивого идентификатора, но это не кажется правильным ответом на меня.

  2. Я хотел бы передать абстракцию param hash в запрос . Он должен отображать столбцы на основе содержимого хэша.

если PARAMS = {адрес электронной почты: '[email protected]'}, то он должен работать, как сейчас, но и другие необходимые параметры могут быть:

{job_title: 'Manager'} 
{city: 'LA', last_name: 'Smith'} 

Я ожидаю, что я буду изменить кода, но не знаю, как передать произвольные элементы в место.

queried_user = User.where(email: params[:email]) 

ответ

1

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

queried_user = User.where(params[:user]) 

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

match 'api/users/query', to: 'users#query', as 'user_search' 

, а затем использовать «user_search_path» для отправки поиска на действия запроса пользователя.

+0

Спасибо. Поскольку я использую Rails, мне нужно немного настроить синтаксис ** get 'api/users/query', чтобы: 'users # query', as: 'user_search' ** – ardochhigh

Смежные вопросы