Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails应用程序-如何在API get请求中添加查询参数?_Ruby On Rails_Json_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails应用程序-如何在API get请求中添加查询参数?

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

我有一个简单的项目模型和“/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
  # 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 record
where
caluse
item.where(“skuid=?”,params[:skuid])
谢谢。部分成功。由于您的建议,“/items.json?skuid=123”可以正常工作。我得到了返回的项目,其skuid为“123”,但现在“/items.json”返回的是空json。早些时候,它用于返回数据库中的所有项。你们能给我一些建议吗?用if块来处理搜索项目,你们还不知道你们有什么问题吗?这是有效的!我必须阅读示波器才能理解你在那里做了什么。它很优雅。谢谢这管用!我必须阅读示波器才能理解你在那里做了什么。它很优雅。谢谢