Ruby on rails Rails应用程序-如何在API get请求中添加查询参数?
我有一个简单的项目模型和“/items”以及“/items.json”工作。但是,我想在API调用中添加一个搜索参数,如“/items.json?skuid=123”,返回的json将只包含skuid=123的项 我尝试了以下方法:Ruby on rails Rails应用程序-如何在API get请求中添加查询参数?,ruby-on-rails,json,ruby-on-rails-4,Ruby On Rails,Json,Ruby On Rails 4,我有一个简单的项目模型和“/items”以及“/items.json”工作。但是,我想在API调用中添加一个搜索参数,如“/items.json?skuid=123”,返回的json将只包含skuid=123的项 我尝试了以下方法: class ItemsController < ApplicationController before_action :set_item, only: [:show, :edit, :update, :destroy] # GET /items
class ItemsController < ApplicationController
before_action :set_item, only: [:show, :edit, :update, :destroy]
# GET /items
# GET /items.json
def index
Rails.logger.debug("index.params=#{params}")
@items = Item.all(params.slice(*Item.attribute_names))
end
class ItemsController
但是我犯了错误
参数数目错误(给定1,应为0)
请给出建议。我将重构您的代码以确定范围 在您的
项目中
型号:
class Item < ActiveRecord::Base
scope :by_sku_id, -> (sku_id) { where(sku_id: sku_id) if sku_id.present? }
end
这减轻了如果您的参数设置或不在控制器内的担忧问题;整体简化控制器代码。您还可以链接这些作用域并保持API的灵活性 我将重构您的代码以确定其作用域 在您的
项目中
型号:
class Item < ActiveRecord::Base
scope :by_sku_id, -> (sku_id) { where(sku_id: sku_id) if sku_id.present? }
end
这减轻了如果您的参数设置或不在控制器内的担忧问题;整体简化控制器代码。您还可以链接这些作用域并保持API的灵活性 我认为您必须首先检查
skuid
params是否已发送,然后才能使用活动记录where
caluse,就像这样Item.where(“skuid=?”,params[:skuid])
谢谢。部分成功。由于您的建议,“/items.json?skuid=123”可以正常工作。我得到了返回的项目,其skuid为“123”,但现在“/items.json”返回的是空json。早些时候,它用于返回数据库中的所有项。您能给我一些建议吗?使用if block来处理搜索项目,您不知道您是否有任何问题。我认为您必须首先检查skuid
params是否已发送,然后才能像这样使用active recordwhere
caluseitem.where(“skuid=?”,params[:skuid])
谢谢。部分成功。由于您的建议,“/items.json?skuid=123”可以正常工作。我得到了返回的项目,其skuid为“123”,但现在“/items.json”返回的是空json。早些时候,它用于返回数据库中的所有项。你们能给我一些建议吗?用if块来处理搜索项目,你们还不知道你们有什么问题吗?这是有效的!我必须阅读示波器才能理解你在那里做了什么。它很优雅。谢谢这管用!我必须阅读示波器才能理解你在那里做了什么。它很优雅。谢谢