Search code examples
ruby-on-railsstrong-parameters

Rails: How to permit a hash with dynamic keys in params?


I make a http put request with following parameters:

{"post"=>{"files"=>{"file1"=>"file_content_1", "file2"=>"file_content_2"}}, "id"=>"4"}

and i need to permit hash array in my code. based on manuals I've tried like these:

> params.require(:post).permit(:files) # does not work
> params.require(:post).permit(:files => {}) # does not work, empty hash as result
> params.require(:post).permit! # works, but all params are enabled

How to make it correctly?

UPD1: file1, file2 - are dynamic keys


Solution

  • Rails 5.1+

    params.require(:post).permit(:files => {})
    

    Rails 5

    params.require(:post).tap do |whitelisted|
      whitelisted[:files] = params[:post][:files].permit!
    end
    

    Rails 4 and below

    params.require(:post).tap do |whitelisted|
      whitelisted[:files] = params[:post][:files]
    end