Tag: 序列化

即使未更改,也要停止ActiveRecord保存序列化列

这与散列的Rails部分更新问题非常相似,但问题并没有真正得到回答恕我直言。 问题是这样的:我有一个带序列化列的模型: class Import < AR::Base serialize :data 就我而言,在第一次保存/创建模型后,这些数据将会,而且应该不会更改。 所以我想禁用AR的function,它始终保存序列化列(这通常是一个好主意,因为它无法检测到这些更改)。 我想禁用保存,因为数据可能非常大,模型会经常更新。 我已经尝试过monkeypatching到ActiceRecord :: AttributeMethods :: Dirty,如下所示: class Import def update(*) if partial_updates? super(changed | (attributes.keys & (self.class.serialized_attributes.keys – [“data”]))) else super end end 但这似乎没有效果。 有人有更好的主意吗? 这是在Rails 3.0.12下

序列化哈希字段和简单表单

我有以下内容。 class Page < ActiveRecord::Base belongs_to :category serialize :fields end fields的值取决于类别。 但作为一个例子; {“address” => “8 finance street, hong kong”, “founded” => “1973”} 在此示例中,类别已将”address”和”founded”定义为自定义字段。 我想要的是说; = simple_form_for(@page) do |f| = f.association :category – f.object.category.fields.each do |field| = f.input field.name 但我需要做一些神奇的事情来处理@page.founded无效的事实 相反,我应该看看@page.fields[“founded”] 。 有什么建议? 更新: 我有点接近了 – if f.object.category – f.object.category.fields.each do |field| = f.input field.name do […]

如何从marshal转储中排除实例变量

我的对象包含一个实例变量,该变量指向其他几个属性中的File对象。 因为这个Marshal不能序列化它。 如何编写一个定制的dump方法,以便只排除该实例变量? class Area attr_accessor :area attr_reader :several_other_attributes …….. def initialize(name) @area = name @several_other_attributes = …. @log = File.open( ‘test.log’, ‘w’) end end

处理JSON时如何使用nested_attributes?

我正在尝试编写一个处理JSON的更新方法。 JSON看起来像这样: { “organization”: { “id”: 1, “nodes”: [ { “id”: 1, “title”: “Hello”, “description”: “My description.” }, { “id”: 101, “title”: “fdhgh”, “description”: “My description.” } ] } } 组织模式: has_many :nodes accepts_nested_attributes_for :nodes, reject_if: :new_record? 组织序列化器: attributes :id has_many :nodes 节点序列化器: attributes :id, :title, :description 组织控制器中的更新方法: def update organization = Organization.find(params[:id]) if organization.update_attributes(nodes_attributes: […]

序列化哈希,日期为YAML rails

TL; DR :Rails 5.1,Ruby 2.4.0将包含时间对象的哈希序列化,并在时间的字符串表示周围加上引号。 这些引用不存在于Rails 2.3,Ruby 1.8.7中并且打破了我的应用程序; 我怎么摆脱他们? 背景和细节 我正在将应用程序从Rails 2.3,Ruby 1.8.7升级到Rails 5.1,Ruby 2.4.0。 我有一个ReportService类,它有一个report_params hash的report_params构造函数参数。 创建这些对象后,此哈希将以YAML格式序列化。 class ReportService < ApplicationRecord # irrelevant AR associations omitted serialize :report_params serialize :output_urls end 用户提交一个表单,其中包含他们想要运行的报表的详细信息,包括使用Time.parse()解析的字符串,该字符串将作为构造函数参数传递; 所以代码(以程序forms删除不相关的细节,省略了许多无关的东西)看起来像 offset = customer.timezone.nil? ? ‘+0000’ : customer.timezone.formatted_offset(:time => start_date) params[:date_from] = Time.parse(“#{start_date} #{params[:hour_from]}:{params[:min_from]} #{offset}”).utc.strftime(‘%Y-%m-%d %H:%M:%S’) report_args = {… report_params: { … […]

具有虚拟属性的活动模型序列化程序 – Rails 4

我目前正在使用RoR制作API,我需要创建一个具有虚拟属性和关联对象的对象。 问题是当我返回具有虚拟属性的对象时,序列化程序不会启动。 这是foo_controller返回的对象 { :id=>280, :virtual=>”y8st07ef7u” :user_id=>280 } :virtual是虚拟属性,user_id是关联表的ID – User。 我的目标是做到这一点 { :id=>280, :virtual=>”y8st07ef7u”, :user=>{ :id=>280, :name=>’foo’ } } Foo_controller设置 class Api::V1::FoosController :virtual), status: 200 end Foo_model设置 class Foo < ActiveRecord::Base belongs_to :user attr_accessor:virtual def set_attribute(path) self.virtual = path end end Foo_serializer设置 class FooSerializer < ActiveModel::Serializer attributes :id, :virtual has_one :user end Foo迁移设置 class […]

在Rails中保存和检索数组

我正在开发Rails中的电子学习,我想将一组数据保存到数据库中,目的是通过电子学习的各个部分跟踪用户的进度。 我遇到过这个问题并回答: 在数据库中存储数组:JSON与序列化数组 …听起来可能有用,但我无法弄清楚如何将它集成到我正在开发的Rails项目中。 鉴于我几乎是一个Rails noob,有人可以用简单的英语(或简单的代码)向我解释我将如何: a)将数据保存到数据库中,该数组在用户最初注册时保存一系列“假”布尔值。 b)在整个电子学习过程中从各个页面检索和更新该数组。 我会列出我尝试过的东西,但它只是在黑暗中疯狂刺伤,我真的不知道从哪里开始。 Comment类应该保存在controllers文件夹中吗? 或者,在我的例子中,它实际上是User类(类似地,它扩展了ActiveRecord)? 再次,任何帮助(理想地解释代码所属的位置)非常感谢。 UPDATE 我被要求更具体,所以我会尝试: 我在数据库中有一个用户表,它(可预见地)有几个字段,包括电子邮件,用户名等。我想在用户表中添加5个字段,每个字段存储一个数组,以跟踪用户通过每个字段的进度。 5个部分。 我设想,当用户打开一段内容时,将更新数组并将相应的索引更新为“true”以标记该部分的部分已完成。 我希望有帮助…… RE-UPDATE 当用户第一次注册时,我希望将数组设置为一系列“假”布尔值。 我将从哪个文件设置数组? 这是用户完成的吗? 目前我正在尝试这个,但我不认为这些值正在设置 – 尽管它没有抛出错误。 class User “: Please choose your age” } validates :section, presence: { :message => “: Please choose the section you belong to”} has_many :posts private def set_progress_vars self.leadership_styles_progress = [false, […]

Rails 2.3.14:如何序列化ActionController :: Request对象?

我需要根据Rails 2.3.14控制器收到的请求对象的类型编写一些Do Things方法。 但是,我不想启动整个应用程序,甚至也不需要控制器; 我想只有一个这样的对象的编组副本,我可以在Rails环境之外工作。 不幸的是,传递给控制器​​的ActionController::Request对象在其内部深处包含Proc对象,这些对象本质上是不可序的。 有没有人知道一种方法来序列化这些对象之一,以便我可以将它存储在一个数据文件中并在另一个脚本中重新创建它? 我宁愿不修补Proc类来提供#marshal_dump方法.. 谢谢!

BigDecimal不能被强制转换为BigDecimal

这应该很简单,但它正在爆炸。 有任何想法吗? d = BigDecimal.new(“2.0”) YAML::load({:a => d}.to_yaml) TypeError: BigDecimal can’t be coerced into BigDecimal from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb:86:in `inspect’ from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb:86:in `inspect’ from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb:86:in `block in ‘ from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb:30:in `call’ from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/inspector.rb:30:in `inspect_value’ from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/context.rb:260:in `inspect_last_value’ from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb.rb:311:in `output_value’ from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb.rb:160:in `block (2 levels) in eval_input’ from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb.rb:273:in `signal_status’ from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb.rb:156:in `block in eval_input’ from /Users/benjohnson/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/irb/ruby-lex.rb:243:in […]

我可以序列化ruby Digest :: SHA1实例对象吗?

G’day人, 我正在使用redis作为后备存储在ruby(sinatra)中重新实现现有的自定义文件上载服务。 客户端计算SHA1哈希并启动上载上传最大64K块直到完成 服务器将块附加到文件计算完整文件的SHA1哈希以validation正确的接收 现在,我希望做的是在每个块上使用ruby(1.9.3)Digest :: SHA1 < 1GB]。 不幸的是Digest :: SHA1和Marshal.dump不兼容 1.9.3p125 :001 > require ‘digest’ => true 1.9.3p125 :002 > $digest = Digest::SHA1.new => # 1.9.3p125 :003 > marshalled_digest = Marshal.dump($digest) TypeError: no _dump_data is defined for class Digest::SHA1 from (irb):3:in `dump’ from (irb):3 from /Users/rhodry/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `’ 1.9.3p125 :004 > 有没有人对如何: 获取对底层内存的访问权限(在C中操作)并存储/恢复这样的对象? 获得一个允许类似用例的替代实现? […]