Rails:从tinyint读取整数

5

我有一个RoR + MySQL的设置。在数据库中有一个Tinyint字段t。当我从Rails读取t的值时,我会得到truefalse,因为Tinyint字段被Rails解释为布尔值。到目前为止都很好。

那么我如何从Rails中将该字段t读取为实际的整数呢?


1
请展示您正在使用的读取布尔值的代码;我很惊讶您不能以同样的方式将其读取为整数(毕竟它是一个1字节的整数列)。我不知道在Ruby中是否有更好的方法,但最坏的情况下,您可以尝试 SELECT CONVERT(tinyintcolumn, [UN]SIGNED) FROM my_table - eggyal
我只是使用标准的Model.find_by_id()来获取记录。 - TTT
2个回答

7

1
如果你只需要一个字段,你也可以使用方法 read_attribute_before_type_cast('your_boolean_field') 或者 your_boolean_field_before_type_cast - Ben Visness
read_attribute_before_type_cast 对我没用。在这里,你可以看到我是如何解决它的。 - Bernardo Loureiro

2
为了进一步说明@sumskyi的回答,如果您总是将此字段视为常规整数进行访问,则可以重写模型的内置方法,从而避免反复运动损伤。
class GroceryStore < ActiveRecord::Base
  # rating is a TINYINT column
  # we just redefine the method here to return the value cast how we want it
  def rating
    self.attributes_before_type_cast['rating'].to_i
  end
end

现在如果你调用 grocerystore.rating,你将得到一个整数而不是布尔值。

1
在这里找到了更多有用的信息:http://apidock.com/rails/ActiveRecord/ConnectionAdapters/AbstractMysqlAdapter/emulate_booleans/class。您可以通过在config/application.rb中设置“ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans = false”来完全禁用布尔解释。但是,他们没有提到您还必须在application.rb中明确要求“active_record/connection_adapters/mysql2_adapter”,因此请务必不要错过!请参阅此帖子:http://stackoverflow.com/questions/10038665/how-do-i-turn-off-tinyint-boolean-emulation-in-rails-3-2-2。 - kael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接