неопределенный метод unserialize_attribute в ruby ​​на рельсах - PullRequest
0 голосов
/ 07 января 2019

Я работаю над обновлением приложения rails, у меня есть метод unserialize_attribue в rails 3, но я не могу увидеть этот метод в rails 5.

Какая альтернатива для unserialize_attribute в рельсах 5 или любые предложения о том, что я могу сделать, Спасибо

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Я получил его, используя serializable_hash , и он доступен в rails 3, а также в rails 5

У меня этот код написан на рельсах 3

unserialized_value = unserialize_attribute(options[:serialized_column]) || { }

который я изменил на

unserialized_value = self.serializable_hash[options[:serialized_column]] || { }

оба метода возвращают один и тот же хеш-объект.

0 голосов
/ 14 января 2019

unserialize_attribute удалено из rails-5, но вы можете не сериализовать значение другим способом,

Метод: 1

> @user.accessible_attribute
# => {"attr1"=>["Email id"], "attr2"=>["First Name"], "attr3"=>["Last Name"]}

> @user.attributes_before_type_cast['accessible_attribute']
# => "--- !ruby/hash:ActionController::Parameters\nattr1:\n- Email id\nattr2:\n- First Name\nattr3:\n- Last Name\n"

Метод: 2

@user.instance_variable_get(:@attributes)['accessible_attribute'].value_before_type_cast
# => "--- !ruby/hash:ActionController::Parameters\nattr1:\n- Email id\nattr2:\n- First Name\nattr3:\n- Last Name\n"

Метод: 3

> @accessible_attribute = ActiveRecord::Base.connection.execute("SELECT accessible_attribute FROM users WHERE id = #{@user.id}")
   (0.4ms)  SELECT accessible_attribute FROM users WHERE id = 3
# => #<Mysql2::Result:0xe0fc374 @query_options={:as=>:array, :async=>false, :cast_booleans=>false, :symbolize_keys=>false, :database_timezone=>:utc, :application_timezone=>nil, :cache_rows=>true, :connect_flags=>-2147442171, :cast=>true, :default_file=>nil, :default_group=>nil, :adapter=>"mysql2", :encoding=>"utf8mb4", :collation=>"utf8mb4_unicode_ci", :database=>"example_development", :pool=>5, :username=>"root", :password=>"password", :socket=>"/var/run/mysqld/mysqld.sock", :flags=>2}>

> @accessible_attribute.first[0]
# => "--- !ruby/hash:ActionController::Parameters\nattr1:\n- Email id\nattr2:\n- First Name\nattr3:\n- Last Name\n"

Примечание: Точно, некоторые предпочитают принимать значение атрибута не сериализованным также @user.accessible_attribute.to_yaml.

...