代码之家  ›  专栏  ›  技术社区  ›  Braham Shakti

Ruby on Rails中未定义的方法“unserialize_attribute”

  •  4
  • Braham Shakti  · 技术社区  · 5 年前

    我正在升级Rails应用程序,我有一个方法 unserialize_attribue 在里面 rails 3 但是我看不到这个方法 rails 5 .

    有什么选择 unserialize_attribute 在5号轨道或任何关于我能做什么的建议,谢谢

    2 回复  |  直到 5 年前
        1
  •  5
  •   ray    5 年前

    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 也。

        2
  •  0
  •   Braham Shakti    5 年前

    我用它来工作 serializable_hash 它在 rails 3 以及在 rails 5

    我用Rails 3编写了这个代码

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

    我改成了

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

    两个方法都返回相同的哈希对象。