Created
March 2, 2016 04:13
-
-
Save simsalabim/6785d3c85bdd20f2e7c5 to your computer and use it in GitHub Desktop.
Rails parses nested params incorrectly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| begin | |
| require 'bundler/inline' | |
| rescue LoadError => e | |
| $stderr.puts 'Bundler version 1.10 or later is required. Please update your Bundler' | |
| raise e | |
| end | |
| gemfile(true) do | |
| source 'https://rubygems.org' | |
| gem 'rails', github: 'rails/rails' | |
| gem 'byebug' | |
| end | |
| require 'action_controller/railtie' | |
| class TestApp < Rails::Application | |
| config.root = File.dirname(__FILE__) | |
| config.session_store :cookie_store, key: 'cookie_store_key' | |
| secrets.secret_token = 'secret_token' | |
| secrets.secret_key_base = 'secret_key_base' | |
| config.logger = Logger.new($stdout) | |
| Rails.logger = config.logger | |
| routes.draw do | |
| get '/' => 'test#index' | |
| post '/' => 'test#create' | |
| end | |
| end | |
| class TestController < ActionController::Base | |
| include Rails.application.routes.url_helpers | |
| def index | |
| render json: params.to_unsafe_h[:product] | |
| end | |
| def create | |
| render json: params.to_unsafe_h[:product] | |
| end | |
| end | |
| require 'minitest/autorun' | |
| require 'rack/test' | |
| class BugTest < Minitest::Test | |
| include Rack::Test::Methods | |
| def setup | |
| @params = { | |
| "items" => [ | |
| { "brand" => { "name" => "Apple" }, "color" => "pink" }, | |
| { "brand" => { "name" => "Samsung" }, "color" => "gold" }, | |
| ] | |
| } | |
| end | |
| def test_post_params | |
| post '/', product: @params | |
| assert_equal @params, json_body | |
| end | |
| def test_get_params | |
| get '/', product: @params | |
| assert_equal @params, json_body | |
| end | |
| private | |
| def app | |
| Rails.application | |
| end | |
| def json_body | |
| JSON.parse(last_response.body) | |
| end | |
| end |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
rails/rails#23997