Ruby on rails CRUDL-使用id以外的参数访问ROR项
我正在为设备设计一个Web API和一个本地数据库。这些数据库有时进行通信。因为每个数据库中的项都有不同的主键,所以我需要使用其他参数从另一个数据库中搜索一个数据库 我知道在ROR中使用Ruby on rails CRUDL-使用id以外的参数访问ROR项,ruby-on-rails,asp.net-web-api,rails-activerecord,Ruby On Rails,Asp.net Web Api,Rails Activerecord,我正在为设备设计一个Web API和一个本地数据库。这些数据库有时进行通信。因为每个数据库中的项都有不同的主键,所以我需要使用其他参数从另一个数据库中搜索一个数据库 我知道在ROR中使用where,但我需要知道在外部传递请求时如何对CRUDL请求建模 例如,如果我想从Web API中删除一个项目,该项目具有与本地数据库SKU匹配的特定SKU编号,那么我希望将我的请求编写为 删除http://webapiaddress.com/items/912094810 其中912094810是SKU 在我的
where
,但我需要知道在外部传递请求时如何对CRUDL请求建模
例如,如果我想从Web API中删除一个项目,该项目具有与本地数据库SKU匹配的特定SKU编号,那么我希望将我的请求编写为
删除http://webapiaddress.com/items/912094810
其中912094810
是SKU
在我的item controller中,我尝试了以下操作
def destroy
@item = Item.where(sku: params[:sku]).first
@item.destroy
end
但是如果我调用DELETEhttp://webapiaddress.com/items/912094810
,我得到一个404错误
有什么建议吗?您需要为
项设置自定义主键
要做到这一点,请在您的routes.rb中包含以下内容:
resources :items, param: :sku
在您的项目中
型号:
self.primary_key = 'sku'
您还需要为项表指定自定义主键,如下所示:
create_table :item, id: false do |t|
t.primary_key :sku
end
或
或者根据您目前的设置进行其他操作
这样,您就可以使用sku
而不是id
对项目进行CRUD。您也不需要where
来选择记录。普通的旧find
方法可以与自定义主键配合使用,因此您可以使用:
Item.find(params[:sku])
您需要为项
表设置自定义主键
要做到这一点,请在您的routes.rb中包含以下内容:
resources :items, param: :sku
在您的项目中
型号:
self.primary_key = 'sku'
您还需要为项表指定自定义主键,如下所示:
create_table :item, id: false do |t|
t.primary_key :sku
end
或
或者根据您目前的设置进行其他操作
这样,您就可以使用sku
而不是id
对项目进行CRUD。您也不需要where
来选择记录。普通的旧find
方法可以与自定义主键配合使用,因此您可以使用:
Item.find(params[:sku])
谢谢不过,我的项目
模型似乎无法识别自我
。知道为什么吗?不知道。您收到了什么错误消息?或者你认为有帮助的其他细节?对不起。我对RoR很陌生。我只知道我的项。rb
模型现在包含这个类项
,但“self”在Cloud9(我的RoR IDE)中高亮显示为红色,好像它不识别关键字self
不确定Cloud9及其高亮显示,但是,self.primary_键
肯定会起作用,而且似乎您添加它的方式是正确的。也许你可以键入self.primary\u key='id'
,而只是尝试运行你的应用程序,检查它是否有效。我不确定它是什么。这也不起作用-只有self
不被识别。谢谢!不过,我的项目
模型似乎无法识别自我
。知道为什么吗?不知道。您收到了什么错误消息?或者你认为有帮助的其他细节?对不起。我对RoR很陌生。我只知道我的项。rb
模型现在包含这个类项
,但“self”在Cloud9(我的RoR IDE)中高亮显示为红色,好像它不识别关键字self
不确定Cloud9及其高亮显示,但是,self.primary_键
肯定会起作用,而且似乎您添加它的方式是正确的。也许你可以键入self.primary\u key='id'
,而只是尝试运行你的应用程序,检查它是否有效。我不确定它是什么。这也不起作用——只有self
无法识别。