Mysql Rails:从tinyint读取整数
我有一个RoR+MySQL设置。在数据库中有一个Tinyint字段t。当我从Rails读取t的值时,我得到true或false,因为Tinyint字段被Rails解释为布尔值。到目前为止还不错 如何从Rails中将这个字段t作为实际整数读取 例如:Mysql Rails:从tinyint读取整数,mysql,ruby-on-rails,ruby,database,ruby-on-rails-3,Mysql,Ruby On Rails,Ruby,Database,Ruby On Rails 3,我有一个RoR+MySQL设置。在数据库中有一个Tinyint字段t。当我从Rails读取t的值时,我得到true或false,因为Tinyint字段被Rails解释为布尔值。到目前为止还不错 如何从Rails中将这个字段t作为实际整数读取 例如: Model.first.attributes_before_type_cast['your_boolean_field'] 这取决于您的DB将返回什么值,在postgesql中,根据@sumskyi的响应构建是“f”或“t”,如果您始终以常规整数访
Model.first.attributes_before_type_cast['your_boolean_field']
这取决于您的DB将返回什么值,在postgesql中,根据@sumskyi的响应构建是“f”或“t”,如果您始终以常规整数访问此字段,您可以覆盖模型的内置方法,并保存自己的重复运动损伤:
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字节的整数列那样,将它作为一个整数来读取。我不知道在Ruby中是否有更好的方法,但最坏的情况下,您可以尝试选择ConvertTinIntColumn,[UN]从my_表中签名?我只使用一个标准的Model.find_by_id来获取记录。找到了一些更有用的信息:通过在config/application.rb中设置ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans=false,可以完全禁用布尔解释。但是,他们没有提到您还必须在application.rb中显式地需要active_record/connection_adapters/mysql2_adapter,所以请确保不要错过这一点!请参阅。如果您只需要一个字段,您也可以使用read\u attribute\u before\u type\u cast“your\u boolean\u field”方法,甚至您的\u boolean\u field\u before\u type\u cast.read\u attribute\u before\u type\u cast对我不起作用,你可以看看我是怎么解决的。