我使用此函数查找用户,我使用的.require
仅在我发送两个或至少一个参数时有效,但如果我发送空,则会出现错误,不应强制发送参数
def find_params
params.require(:person).permit(:name, :age)
end
如果我发送的名字或年龄我将工作,但如果我什么也不发送我得到这个错误
params is missing
如果我像这样发送空:{}
或null
,它应该可以正常工作,返回所有用户
还是我不应该用这个来搜索用户?
params.require(:person).permit(:name, :age)
我可能需要这样的用户吗?
params[:name] and params[:age]
我正在使用reactjs我正在发送有效载荷liket如下:
{name:"ed", age:"12", skin:"black", weight: "180lbs", height:"183"}
4条答案
按热度按时间6yoyoihd1#
Rails的
StrongParameters
是为一个非常特殊的用途而构建的:它提供了一个保护属性不被最终用户赋值的接口。这使得动作控制器参数在被显式枚举之前禁止在活动模型批量赋值中使用。
这意味着当您使用
params
只是为了从数据库读取数据时,就没有必要使用StrongParameters
(而且几乎没有任何优势)。相反,我将直接在控制器中使用
params
,如下所示:要实现这一点,您需要在
app/models/user.rb
中定义一个filter_by
作用域:alen0pnh2#
使用
ActionController::Parameters#require
的全部意义在于,如果您期望成为散列的参数根本没有被发送,则会导致您的create/update方法提前退出,因为进一步处理请求是没有意义的,这可以防止潜在的未捕获的nil错误。如果你想允许一个键为空,请使用
#fetch
:#fetch
允许你传递第二个键,这是默认值,它返回一个新的ActionController::Parameters示例。但是看起来你实际上发送的是没有嵌套的平面参数,在这种情况下你也不需要提取:请注意,Rails默认为JSON请求打开了参数 Package ,这两种方法都很可能有效。
piztneat3#
您可以使用
Find User
Routes.rb
控制器/用户_控制器.rb
型号/用户.rb
=〉这是我以前用过的方法,希望能帮到你。
i2loujxw4#
如果你想让
find_params
函数处理空参数或缺失参数,你可以修改它,直接对params对象使用permit方法,而不是require方法,这样你就可以处理:person参数缺失或为空的情况。以下示例说明如何修改
find_params
函数以处理空参数或缺少的参数:经过这样的修改,函数仍然会返回:name和:age参数(如果它们存在),但如果它们丢失,它不会引发错误。如果您希望允许所有参数,可以使用
:person
参数,而不是指定单个参数:这将允许函数接受
:person
参数中传递的任何参数。