我正在为要使用的设备设计Web API和本地数据库。这些数据库有时会通信因为每个数据库中的项目具有不同的主键,所以我需要使用其他参数从另一个数据库中搜索一个数据库。
我知道在ROR中使用where
,但我需要知道在外部传递请求时如何建模我的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 :(得分: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
根据你现在的设置,或其他东西。
通过它,您将能够使用items
代替sku
来归档id
。此外,您不需要where
来选择记录。普通的旧find
方法可以正常使用您的自定义主键,因此您将能够使用:
Item.find(params[:sku])