Ruby on rails 如何使用像强参数这样的查询参数?

Ruby on rails 如何使用像强参数这样的查询参数?,ruby-on-rails,ruby,performance,ruby-on-rails-3,parameters,Ruby On Rails,Ruby,Performance,Ruby On Rails 3,Parameters,如何将查询参数用作强参数。 这是我的POST/tag方法,由前端调用以搜索帖子 def tag if params[:category] == 'Shop' render json: ShopPostPopulator.new(params[:search]).run else render json: Part.search(params[:search]) end end 如果我想使用强参数而不是“params[:search]”,我应该怎么做。实际上只是

如何将查询参数用作强参数。 这是我的POST/tag方法,由前端调用以搜索帖子

def tag
  if params[:category] == 'Shop'
     render json: ShopPostPopulator.new(params[:search]).run
  else
     render json: Part.search(params[:search])
  end
end

如果我想使用强参数而不是“params[:search]”,我应该怎么做。

实际上只是一个类似散列的对象,“强参数”实际上相当于使用
hash#slice
只允许通过一个属性白名单。它可以防止大规模分配攻击。初学者和经常有经验的Rails开发人员。似乎认为它神奇地过滤和清理了参数。它不会——它只是防止你因为无知、愚蠢或懒惰而受到大规模注射攻击

只有将参数散列分配给模型时,才需要白名单:

User.update(
  params.permit(:email, :password)
)
在这种情况下,它可以防止恶意用户传递
role=superadmin
id=1
(因为第一个用户通常是管理员)。如果只是从params散列中分配一个属性,则不需要使用强属性。2012年引入的主要区别是,如果将没有
@allowed=true
属性的ActionController::Parameters对象传递给
.new
.update
.create
以及生成或更新记录的其他方法,则会引发错误,从而导致白名单的出现

如果希望,可以使用
ActionController::Parameters#permit
确保参数是简单的标量类型(而不是散列或数组):

如果
search
是一个带有嵌套键的可选参数,则可以将其列为白名单,如下所示:

params.fetch(:search, {}).permit(:foo, :bar)
您还可以将参数设为必需参数,以便在缺少以下参数时引发ActionController::ParameterMissing异常:

params.require(:search).permit(:foo, :bar)

这就是你在Rails中99%的时间都在做的事情,因为如果我们不能对请求做任何有意义的事情,它会提前退出。

你说的“像强参数一样使用<代码>查询参数”是什么意思?我从url获得了一个搜索参数。。。我将这个param值发送给一个类方法,但是我被要求使用强参数,而不是直接使用passind param[:search]。我该怎么办?在这种情况下使用强参数似乎没有任何意义,所以首先,我要问让你这么做的人为什么。
params.require(:search).permit(:foo, :bar)