字符串的未定义方法许可

时间:2016-02-22 08:13:17

标签: ruby-on-rails api ruby-on-rails-4 strong-parameters

我目前正在设计和实施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解决方法?

3 个答案:

答案 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时被调用,否则返回空哈希。