我有一个关于 Ruby on Rails 4.0 和 jruby 1.7.9 的表格。我使用 Mongoid 而不是 ActiveRecord。
当我提交带有 DateTime 对象和附件(多部分文件)的表单时,它会引发错误“无法复制 Fixnum”。应用程序将 DateTime 对象作为 Unix 时间戳存储在数据库中。
如果我提交没有 DateTime 的表单,它会成功保存附件。如果我提交没有附件的表单,它会按预期保存 DateTime。当两者都实现时,它会引发错误。
我怎样才能解决这个问题?
完整的错误消息是:
can't dup Fixnum
Extracted source (around line #222):
220 self.data[name] = DateTime.parse(value).to_time.to_i
221 when 'datetime'
222 self.data[name] = DateTime.parse(value).to_time.to_i
223 when 'time'
224 self.data[name] = DateTime.parse(value).to_time.to_i
225 when 'number'
Rails.root: /Users/mehmetdavut/Documents/
Application Trace | Framework Trace | Full Trace
app/models/content.rb:222:in `change_property_types'
app/models/content.rb:214:in `change_property_types'
app/controllers/contents_controller.rb:56:in `update'
Request
Parameters:
{"utf8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"viv0CO7QKSY8kklTiLAXpdGkqv2W7fiW3Zrf2ZnKjpc=",
"content"=>{"data"=>{"second_datetime"=>"2014-04-07 17:20:00"},
"url"=>"",
"language_id"=>"ffef8bca0000ffd4b4cee70e",
"device_id"=>"52eeb9964d65682809130000",
"template_id"=>"fff02c4d0000a37cc11eed8f",
"layout_id"=>"fff02c760000a37cc11eed90",
"access"=>{"requires_authentication"=>"0",
"requires_ssl"=>"0"},
"discoverability"=>{"title"=>"",
"description"=>"",
"keywords"=>"",
"sitemap_change_frequency"=>"",
"sitemap_priority"=>"",
"exclude_from_search"=>"0"},
"menu"=>{"alias"=>"",
"class"=>"",
"passive"=>"0",
"script"=>"",
"show_in_navigation"=>"0",
"show_in_sitemap"=>"0"},
"taxonomy"=>{"category_id"=>"",
"tags"=>""},
"published_at"=>"2014-03-14T12:01:24-08:00",
"unpublished_at"=>""},
"attachments"=>{"second_file"=>#<ActionDispatch::Http::UploadedFile:0x162cbfcf @original_filename="Screen Shot 2014-03-13 at 00.38.30.png",
@headers="Content-Disposition: form-data; name=\"attachments[second_file]\"; filename=\"Screen Shot 2014-03-13 at 00.38.30.png\"\r\nContent-Type: image/png\r\n",
@tempfile=#<Tempfile:/var/folders/cs/6xmggtv54nq8l2xw77mzhtcr0000gn/T/RackMultipart20140314-18002-csbpyn>,
@content_type="image/png">},
"commit"=>"Update Content",
"page_id"=>"fff02ce20000a37cc11eed96",
"id"=>"fff02ce20000a37cc11eed97"}
这是“change_property_types”方法:
def change_property_types
self.data.each do |name, value|
property = self.page.document.properties.where(name: name).first
unless value.blank?
case property.type
when 'date'
self.data[name] = DateTime.parse(value).to_time.to_i
when 'datetime'
self.data[name] = DateTime.parse(value).to_time.to_i
when 'time'
self.data[name] = DateTime.parse(value).to_time.to_i
when 'number'
self.data[name] = value.to_i
when 'file'
# self.attachments << Attachment.create(file: value)
else
self.data[name] = value
end
end
end
end