My Booking model has: serialize :custom_data, Hash

From the console it works as expected saving values to the custom_data
attribute.

But when having a form with parameters like
this: booking[custom_data][hello] and creating a new object in the
controller like this: Booking.new( params[:booking] ), values are saved in
the database with added metadata like this: ---
!ruby/hash:ActiveSupport::HashWithIndifferentAccess

How can get rid of the HashWithIndifferentAccess-metadata when saving from
a form?

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/1WO6HkqIqjAJ.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Search Discussions

  • Murali dhararao at Jun 1, 2012 at 1:00 pm
    Hi,

    You can check condition like this

    if params[:booking].kind_of? HashWithIndifferentAccess
    // logic here
    end
    On Fri, Jun 1, 2012 at 6:26 PM, Espen Antonsen wrote:

    My Booking model has: serialize :custom_data, Hash

    From the console it works as expected saving values to the custom_data
    attribute.

    But when having a form with parameters like
    this: booking[custom_data][hello] and creating a new object in the
    controller like this: Booking.new( params[:booking] ), values are saved in
    the database with added metadata like this: ---
    !ruby/hash:ActiveSupport::HashWithIndifferentAccess

    How can get rid of the HashWithIndifferentAccess-metadata when saving from
    a form?

    --
    You received this message because you are subscribed to the Google Groups
    "Ruby on Rails: Talk" group.
    To view this discussion on the web visit
    https://groups.google.com/d/msg/rubyonrails-talk/-/1WO6HkqIqjAJ.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to
    rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at
    http://groups.google.com/group/rubyonrails-talk?hl=en.


    --
    Thanks & Regards,
    MuraliDharaRao.T
    +91-9642234646

    --
    You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
  • Espen Antonsen at Jun 1, 2012 at 1:15 pm
    I fixed it by converting it to a hash:
    @booking.custom_data = params[:booking][:custom_data].to_hash if
    params[:booking][:custom_data]

    I do think that Rails should handle this automatically though. There is no
    way to see this error by just using rails. You have to look at the actual
    data stored in the database to see that it stores more than just the actual
    data. I would suspect there are more people saving serialised attributes
    from a form and will have this issue without realising it.
    On Friday, June 1, 2012 2:56:13 PM UTC+2, Espen Antonsen wrote:

    My Booking model has: serialize :custom_data, Hash

    From the console it works as expected saving values to the custom_data
    attribute.

    But when having a form with parameters like
    this: booking[custom_data][hello] and creating a new object in the
    controller like this: Booking.new( params[:booking] ), values are saved in
    the database with added metadata like this: ---
    !ruby/hash:ActiveSupport::HashWithIndifferentAccess

    How can get rid of the HashWithIndifferentAccess-metadata when saving from
    a form?
    --
    You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
    To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/JNiKJRng5rUJ.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
  • Matt Jones at Jun 2, 2012 at 3:26 pm

    On Friday, 1 June 2012 09:15:18 UTC-4, Espen Antonsen wrote:
    I fixed it by converting it to a hash:
    @booking.custom_data = params[:booking][:custom_data].to_hash if
    params[:booking][:custom_data]

    I do think that Rails should handle this automatically though. There is no
    way to see this error by just using rails. You have to look at the actual
    data stored in the database to see that it stores more than just the actual
    data. I would suspect there are more people saving serialised attributes
    from a form and will have this issue without realising it.
    I don't follow that logic at all. If you're interacting with a serialized
    column by any other means than loading it from the DB as a Ruby object, you
    are DOING IT WRONG. If you really, really want to interact with hashes in
    the DB, check out things like Postgres's Hstore:

    http://www.postgresql.org/docs/9.0/static/hstore.html

    --Matt Jones

    --
    You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
    To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/yjHWHY-ln4wJ.
    To post to this group, send email to rubyonrails-talk@googlegroups.com.
    To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
    For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouprubyonrails-talk @
categoriesrubyonrails
postedJun 1, '12 at 12:56p
activeJun 2, '12 at 3:26p
posts4
users3
websiterubyonrails.org
irc#RubyOnRails

People

Translate

site design / logo © 2021 Grokbase