CRUDL - 使用id以外的参数访问ROR项

时间:2017-02-06 21:04:59

标签: ruby-on-rails asp.net-web-api rails-activerecord

我正在为要使用的设备设计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错误。

有什么建议吗?

1 个答案:

答案 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])