2017-02-06 13 views
1

Я разрабатываю веб-API и локальную базу данных для использования устройств. Эти базы данных иногда общаются. Поскольку элементы в каждой базе данных имеют разные первичные ключи, мне нужно будет искать одну базу данных из другой базы данных, используя другие параметры.CRUDL - Доступ к элементу ROR с параметром, отличным от id

Я знаю, для использования where в ROR для этого, но мне нужно знать, как смоделировать мой запрос CRUDL, когда я передаю запрос извне.

Например, если я хочу, чтобы удалить элемент из Web API с определенным номером SKU, который соответствует моим локальной базе данных SKU, я хотел бы написать мой запрос как DELETE http://webapiaddress.com/items/912094810 где 912094810 является SKU.

В моем контроллере элемента, я попытался следующие

def destroy 
     @item = Item.where(sku: params[:sku]).first 
     @item.destroy 
end 

Но тогда, если я позвоню DELETE http://webapiaddress.com/items/912094810, я получаю 404 ошибки.

Любые предложения?

ответ

0

Вам необходимо настроить пользовательский первичный ключ для таблицы Items.

Чтобы сделать это есть в вашем routes.rb что-то вроде:

resources :items, param: :sku 

И в вашей Item модели:

self.primary_key = 'sku' 

Также необходимо указать пользовательский первичный ключ для Items таблицы, как это:

create_table :item, id: false do |t| 
    t.primary_key :sku 
end 

OR

def change 
    add_column :items, :sku, :primary_key 
end 

ИЛИ что-то еще в соответствии с настройкой, которую вы сейчас имеете.

С этим вы сможете использовать CRED items, используя sku вместо id. Также вам не понадобится where, чтобы выбрать запись. Обычный старый метод find будет отлично работать с вашим пользовательским первичным ключом, поэтому вы сможете использовать:

Item.find(params[:sku]) 
+0

спасибо! Моя модель «Элемент», похоже, не признает «себя». любая идея почему? –

+0

Не совсем. Какое сообщение об ошибке вы получаете? Или любые другие детали, которые, по вашему мнению, могут помочь? – VAD

+0

Извините. Я очень новичок в RoR. Все, что я знаю, это моя модель 'item.rb' содержит это сейчас' class Item