2017-02-06 2 views
1

私は、使用するデバイス用のWeb APIとローカルデータベースを設計しています。これらのデータベースは時には通信します。各データベースのアイテムには異なる主キーがあるため、他のパラメータを使用して他のデータベースから1つのデータベースを検索する必要があります。CRUDL - id以外のパラメータでROR項目にアクセスする

これはRORでwhereを使用することがわかりましたが、外部から要求を渡すときにCRUDL要求をモデル化する方法を知る必要があります。例えば

私は私のローカルデータベースSKUに一致する特定のSKU番号を持つWeb APIから項目を削除したい場合は、私が912094810がSKUである DELETE http://webapiaddress.com/items/912094810 のように私の要求を書きたいと思います。私のアイテムコントローラで

、私は次の

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

を試してみました。しかし、私はDELETE http://webapiaddress.com/items/912094810を呼び出した場合、その後、私は404エラーを取得します。

提案がありますか?

答えて

0

Itemsテーブルのカスタムプライマリキーを設定する必要があります。

resources :items, param: :sku 

そして、あなたのItemモデルで:

self.primary_key = 'sku' 

また、あなたがこのようなItemsテーブルのカスタム主キーを指定する必要があります。

のようなあなたの routes.rb何かを持っていること行うに

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

または

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

またはこれ以外の設定は現在の設定通りです。

itemsを使用すると、idの代わりにskuを使用してCRUDすることができます。また、レコードを選択するのにwhereは必要ありません。プレーン古いfindメソッドは、カスタムプライマリキーで正常に動作するため、使用することができます:

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

ありがとう!私の 'Item'モデルは' self'を認識していないようです。どんな考え? –

+0

実際はありません。どのようなエラーメッセージが表示されますか?またはあなたが助けてくれると思われるその他の詳細は? – VAD

+0

申し訳ありません。私はRoRにとってとても新しいです。私の知る限り、 'item.rb'モデルにはこれが含まれています。クラスアイテム

関連する問題