Skip to content

Instantly share code, notes, and snippets.

@rselva
Last active February 23, 2024 17:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rselva/5b6b524ee57a5b1b0465bfb2e0eb5d07 to your computer and use it in GitHub Desktop.
Save rselva/5b6b524ee57a5b1b0465bfb2e0eb5d07 to your computer and use it in GitHub Desktop.
Keyword arguements, long parameters, objects instead of primitive types
irb(main):012:1* def upsert(terminal_id:, slug:, value:)
irb(main):013:1* pp terminal_id
irb(main):014:1* pp slug
irb(main):015:1* pp value
irb(main):016:0> end
=> :upsert
irb(main):023:0> params = ActionController::Parameters.new({terminal_id:'12345678', slug:'name', value:'Lynx'} )
=> #<ActionController::Parameters {"terminal_id"=>"12345678", "slug"=>"name", "value"=>"Lynx"} permitted: false>
irb(main):024:0> upsert_params = params.require(:terminal_id, :slug, :value)
/usr/local/bundle/gems/actionpack-7.0.8/lib/action_controller/metal/strong_parameters.rb:471:in `require': wrong number of arguments (given 3, expected 1) (ArgumentError)
irb(main):025:0> upsert_params = params.permit(:terminal_id, :slug, :value)
=> #<ActionController::Parameters {"terminal_id"=>"12345678", "slug"=>"name", "value"=>"Lynx"} permitted: true>
irb(main):026:0> upsert(**upsert_params.to_hash)
(irb):12:in `upsert': missing keywords: :terminal_id, :slug, :value (ArgumentError)
irb(main):027:0> upsert(**{terminal_id:'12345678', slug:'name', value:'Lynx'})
"12345678"
"name"
"Lynx"
=> "Lynx"
irb(main):028:0>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment