Tag: 类型

如何将表列转换为另一种数据类型

我的Postgres数据库中有一个Varchar类型的列,我想要整数…现在我想要更改它们,不幸的是,这似乎不能使用我的rails迁移。 change_column :table1, :columnB, :integer 这似乎输出这个SQL: ALTER TABLE table1 ALTER COLUMN columnB TYPE integer 所以我试着这样做: execute ‘ALTER TABLE table1 ALTER COLUMN columnB TYPE integer USING CAST(columnB AS INTEGER)’ 但是在这个实例中,强制转换不起作用,因为某些列为空… 有任何想法吗? 错误: PGError: ERROR: invalid input syntax for integer: “” : ALTER TABLE table1 ALTER COLUMN columnB TYPE integer USING CAST(columnB AS INTEGER) Postgres v8.3

如果超过24小时,Mysql“Time”类型在Rails中给出“ArgumentError:参数超出范围”

我正在一个遗留的mysql数据库上编写一个rails应用程序,它也提供了一个PHP生产工具。 由于这种设置,我无法更改数据库结构。 我遇到的问题是两个表有一个“时间”属性(持续时间),只要时间低于24:00:00 rails处理这个,但是一旦rails遇到类似39:00:34的东西我得到这个“ArgumentError:参数超出范围”。 我已经研究过这个问题并看到rails如何处理时间类型,从我的理解中它将它视为日期时间,因此值为39:00:34会抛出此错误。 我需要一些映射/或更改类型转换的方法,所以我不会得到这个错误。 将值读取为字符串也可以。 任何想法将是最受欢迎的。 干杯

Rails STI:如何更改“类型”列的类名和值之间的映射

由于公司规则,我不能使用我们的域名类; 我打算用一个类比来代替。 我有一个名为projects的表,其中有一个名为’type’的列,可能的值为’indoor’和’outdoor’。 具有室内和室外的记录具有明显的function分离,并且作为STI实现非常巧妙地适合。 不幸的是,我无法更改类型名称,也无法在全局命名空间中添加类。 有没有办法为’type’指定不同的值? 注意:我不是要为STI使用不同的列名而不是’type’。 我希望类型的值不同于我的类名。

为什么Rails模型关联结果不是自然的ActiveRecord :: Relations?

我正在使用Rails 3.2.0 假设我有: class Comment < ActiveRecord::Base has_many :articles end c1 = Comment.last 然后 c1.articles.class # => Array c1.articles.where(‘id NOT IN (999999)’).class # => ActiveRecord::Relation 为什么关联的结果不是 ActiveRecord::Relation的类型? 它显然是/ 在某个时候 : c1.articles.to_orig # undefined method `to_orig’ for # c1.articles.class # => Array 某些评估作用于ActiveRecord :: Relation对象,但检查该类会给出不同的类型。 特别是,当使用merge来连接多个查询时,这会破坏构建延迟加载的查询。

rails:模拟“将页面另存为”行为

对于rails项目,我需要为用户提供可下载的HTML版本的统计页面。 到目前为止我创建了一个控制器动作,它将按如下方式设置标题,然后渲染并返回我的vanilla html页面: headers[“Content-Type”] ||= ‘application/x-unknown’ headers[“Content-Disposition”] = “attachment; filename=\”#{filename}\”” 这将使浏览器弹出下载对话框,而不是立即渲染html,这是所希望的。 但是,这只给我空白的HTML,没有嵌入任何图像或CSS。 当我点击“将页面另存为”菜单项(甚至可能是zip文件中的zip图像,css和html文件并返回)时,我想要做的事情基本上与浏览器所做的相同。 这样做的正确方法是什么? 有没有办法通过标题设置调用浏览器“将页面另存为”对话框? 问候, 塞巴斯蒂安

Ruby – 在Ruby中扩展内置变量

我想在Ruby中扩展变量的function。 原因是我正在研究类似系统或值检查器的东西(这听起来有点疯狂,但整个想法是长期解释,只是我想扩展默认变量的原因)。 我已经读到在Ruby中,一切都是对象; 所以变量就是对象。 对于可以通过元编程改变的东西,Ruby应该是相当自由的。 是否有某种与我可以扩展的局部变量相关联的“类”? 我想为每个包含类型的字符串表示forms的变量关联一个字符串变量。 此外,我想拦截变量赋值,并在每次为变量赋值新值时执行方法。 这是我可以检查,如果新值根据类型是正确的(存储为变量中的字符串)。 如果Ruby中的局部变量被定义为类的对象,我可以扩展该类或通过ruby mixin修改它。 解决方法是为我的变量创建一个新类(而不是使用Ruby的局部变量中的构建)。 该类可以具有值属性,类型的属性(存储为字符串)以及get和set方法。 这样我可以解决我的问题,但我想在ruby中扩展内置变量,如果可能的话。 目前的工作正在进行中 class Fixnum attr_accessor :tp @tp def mytype ( type ) @tp = type end def typecheck #call typechecker puts “checked” end end 测试代码: a = 3 a.mytype(“nat”) puts a.tp a.typecheck 还有两个问题。 首先 ,我认为不可能向Fixnum添加新的构造函数。 其次 ,我想拦截变量访问,即“b = a”调用a的方法’typecheck’。 但这需要类似于面向方面编程的东西,我不确定这是否可以通过Ruby的元编程方便解决。

如何从可能具有前导零的字符串中解析数字?

在ruby中,我使用以下格式解析日期:24092008.我想将每个部分(年,月,日)转换为数字。 我使用正则表达式将它们拆分,它产生三个字符串,我将它传递给Integer构造函数。 date =~ /^([\d]{2})([\d]{2})([\d]{4})/ year = Integer($3) month = Integer($2) day = Integer($1) 当它达到月线时,崩溃如下: `Integer’: invalid value for Integer: “09” (ArgumentError) 我花了一段时间才意识到它正在解释前导零,因为Octal和09不是有效的八进制数(它与“07”一起工作正常)。 有没有一个优雅的解决方案,或者我应该测试小于10的数字并首先删除零? 谢谢。

Rails:创建自定义数据类型/创建速记

我想知道如何在rake迁移文件中创建自定义数据类型。 示例:如果要创建模型,则可以在迁移文件中添加列。 它可能看起来像这样: def self.up create_table :products do |t| t.column :name, :string t.timestamps end end 我想知道如何创建这样的东西: t.column :name, :my_custom_data_type 这样做的原因就是创建一个“货币”类型,它只不过是精度为8且比例为2的十进制数。因为我只使用MySQL,所以这个数据库的解决方案足够了。 感谢您的反馈和意见!

Ruby:在查询字符串中获取值的正确类型

说我有 str = “a=2&b=3.05&c=testing” 我跑 require ‘cgi’ out = {} CGI::parse(str).each { |k,v| out[k] = v[0] } 当我输出a ,2是一个string ,当我希望它是一个Int out[‘a’] // “2” (instead of int 2) out[‘b’] // “3.05” (instead of float 3.05) 有没有办法从查询字符串中更正类型? 更新: 添加此方法以测试数字 def is_a_number?(s) s.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true end 并在解析期间 CGI::parse(url).each do |k,v| val = v[0] if […]