验证Restful端点中的参数

时间:2015-07-01 18:57:05

标签: ruby-on-rails ruby-on-rails-3 web-services rest ruby-on-rails-4

我是rails restful web服务的新手,我正在尝试返回json转储交易的构建服务。到目前为止,当我点击http://localhost:3000/api/deals时,我的应用程序以json格式返回这些交易。现在我想在uri <div class="thumbnail-popular" style="background: url('http://images.gogoanime.tv/images/upload/Go!.Princess.Precure.full.1812487.jpg');"></div> 中添加两个必需参数(deal_id和title)和两个可选参数。验证这两个必需参数的最佳方法是什么?换句话说,我只想在有deal_id和title参数时才进行查询。假设交易模型有字段deal_id,title,description和vendor 这是我的代码

控制器

http://localhost:3000/api/deals?deal_id=2&title=book

路由

  module Api
  class DealsController < ApplicationController
  respond_to :json

  def index
   @deals = Deal.all
   respond_with (@deals)
  end
 end
end

1 个答案:

答案 0 :(得分:1)

要验证Rails路由中查询参数的存在,可以使用:constraints选项。因此,在您的情况下,如果您想要存在参数deal_idtitle,您可以通过更改:

resources :deals

要:

resources :deals, :constraints => lambda{ |req| !req.params[:deal_id].blank? && !req.params[:title].blank? }

然后,在您的控制器中,您可以访问params哈希值中的所有四个参数。

或者,如果要提供更多用户友好的错误消息,可以在控制器中进行验证。有很多方法。我可能会做这样的事情:

def action
  if params[:deal_id].blank? || params[:title].blank?
    flash[:warning] = 'Deal ID and title must be present'
    redirect_to root_path and return
  end

  #rest of your code goes here
end