2017-02-06 1 views
1

장치가 사용할 웹 API와 로컬 데이터베이스를 설계 중입니다. 이러한 데이터베이스는 때때로 통신합니다. 각 데이터베이스의 항목에는 다른 기본 키가 있으므로 다른 매개 변수를 사용하여 다른 데이터베이스에서 한 데이터베이스를 검색해야합니다.CRUDL - id가 아닌 매개 변수로 ROR 항목에 액세스하기

ROR에서는 where을 사용하고 있지만 외부에서 요청을 전달할 때 내 CRUDL 요청을 모델링하는 방법을 알아야합니다. 내 로컬 데이터베이스 SKU와 일치하는 특정 SKU 번호와 웹 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이 필요하지 않습니다. Plain old find 메서드는 사용자 정의 기본 키와 잘 작동하므로 다음을 사용할 수 있습니다.

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

감사합니다! 제 'Item'모델은 '자기'를 인식하지 못하는 것 같습니다. 왜 어떤 생각? –

+0

아닙니다. 어떤 오류 메시지가 나타 납니까? 또는 도움이 될만한 다른 세부 정보가 있습니까? – VAD

+0

죄송합니다. 나는 RoR에 처음 온 사람이다. 내 item.rb 모델은 이제'class Item