不同控制器方法的强参数

GN.*_*GN. 1 ruby-on-rails strong-parameters

我正在Rails中创建一个控制器,我正在寻找方法为不同的控制器方法提供不同的强参数

在更新和新操作中,我想要求 post

params.require(:post).permit(:body, :is_public, :title, :id)
Run Code Online (Sandbox Code Playgroud)

但在post/index,我不需要这些参数.

对于不同的控制器方法,如何为不同的要求提供强参数?

max*_*max 9

您的"强参数方法"只是Ruby方法.你可以拥有许多你想要的东西.

class PostsController < ApplicationController

  def create
    @post = Post.new(post_params)
  end

  def update
    @post = Post.find(params[:id])
    if @post.update(update_params)
      # ...
    else 
      # ...
    end
  end

  private

  def base_params
    params.require(:post)
  end

  # Don't take IDs from the user for assignment!
  def update_params
    base_params.permit(:body, :title)
  end

  def create_params
    base_params.permit(:body, :title, :foo, :bar)
  end
end
Run Code Online (Sandbox Code Playgroud)

您也可以随意命名.调用它[resource_name]_params只是一个脚手架约定.

但强参数只是将参数列入白名单以避免质量分配漏洞的机制.它们不会神奇地消毒参数(除了只允许某些标量类型).

在99.9%的情况下,您只会在更新中处理具有强参数的参数,并创建与POST和PUT/PATCH对应的操作.这些是从用户获取参数哈希并将它们传递给模型的操作.如果您不小心将允许的参数列入白名单,那么就存在潜在的质量分配漏洞.

show,edit并且destroy动作通常只需要一个单一的参数在ID的形式.new很少接受任何参数,index只有在构建某种搜索或过滤时才接受参数.

show,edit,newindex是GET路线所以他们应该是幂等的,而不是改变或创造资源.

除非你真的搞砸了所有事情,否则这些都不具备任何真正的质量分配漏洞的可能性.