我目前正在设计和实施RoR API。
我正面临一个关于强参数的问题。
我希望收到以下属性:
{ analysis_data: { barcode: "some_string" } }
为确保这一点,我只需使用require / permit组合:
params.require(:analysis_data).permit(:barcode)
如果分析数据为零或散列,则此方法很有效。
但是,如果客户端提交的请求中的analysis_data是字符串而不是散列,则请求将返回错误500.
例如:
{ analysis_data: "some_string" }
产生以下500错误:
NoMethodError (undefined method `permit' for "barcode":String):
是否有clean
解决方法?
答案 0 :(得分:1)
试试这个
params.fetch(:analysis_data, {}).permit(:barcode)
答案 1 :(得分:0)
不确定是否要允许字符串和散列或阻止字符串而不抛出错误。如果它是前者,您可以使用params.require(:analysis_data).permit!
允许任何值,只要它在analysis_data中。
答案 2 :(得分:0)
那:
is_valid()
或更像这样的可读性:
params[:analysis_data].is_a?(ActionController::Parameters) ? params.fetch(:analysis_data, {}).permit(:barcode) : {}
这样,return {} unless params[:analysis_data].is_a? ActionController::Parameters
params.fetch(:analysis_data, {}).permit(:barcode)
仅在提交.permit
时被调用,否则返回空哈希。