Ruby on rails 将Rails中的嵌套参数列为白名单

Ruby on rails 将Rails中的嵌套参数列为白名单,ruby-on-rails,strong-parameters,Ruby On Rails,Strong Parameters,我有一个具有以下结构的params散列(它是使用字段_构建的) 我正在尝试创建一个entries\u attributes\u params方法,该方法应该只返回params['daily\u log']['entries\u attributes']的白名单版本。不幸的是,当我调用该方法时,它总是返回为{} 以下作品 def entries_attributes_params` params[:daily_log][:entries_attributes].permit! end 但我

我有一个具有以下结构的params散列(它是使用字段_构建的)

我正在尝试创建一个
entries\u attributes\u params
方法,该方法应该只返回
params['daily\u log']['entries\u attributes']
的白名单版本。不幸的是,当我调用该方法时,它总是返回为
{}

以下作品

def entries_attributes_params`
   params[:daily_log][:entries_attributes].permit!
end
但我想避免使用
许可证。因此,我尝试了以下方法:

def entries_attributes_params
    params[:daily_log][:entries_attributes].permit(:count, :hours, :minutes)
end
这不管用。我把
{}
拿回来

我尝试用
[]
将传递到
permit
的属性包装起来,但这不起作用

...permit([...attributes...])
我该怎么做?

试试这个:

def entries_attributes_params
  params_hash = params.require(:daily_log).permit(:id, entries_attributes: [:count, :hours, :minutes])
  params_hash[:entries_attributes]
end

我明白了。关键是要认识到,
params.permit…
实际上不会更改主参数散列。它会创建一个新对象。将此想法与下面的K M解决方案结合起来,给出了完整的答案:

def entries_attributes_params
  p = params.require(:daily_log).permit(:id, entries_attributes: [:count, :hours, :minutes])
  p[:entries_attributes]
end

我得到以下错误:ActionController::ParameterMissing(param丢失或值为空:entries\u attributes)感谢您尝试一下。你修改过的密码让我有了一部分。上面的代码将返回散列的错误部分,因此完整的答案更复杂一些。
def entries_attributes_params
  p = params.require(:daily_log).permit(:id, entries_attributes: [:count, :hours, :minutes])
  p[:entries_attributes]
end