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,我不需要这些参数.
对于不同的控制器方法,如何为不同的要求提供强参数?
您的"强参数方法"只是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,new和index是GET路线所以他们应该是幂等的,而不是改变或创造资源.
除非你真的搞砸了所有事情,否则这些都不具备任何真正的质量分配漏洞的可能性.