我在MySQL数据库中有一个bit
类型的字段,但我不确定如何访问该值。
ruby debug
方法给了我(注意空格,它们可能是以二进制形式存储的不可见字符):
--- &id001 !ruby/object:Room
attributes:
bit_field_false: !binary |
AA==
bit_field_true: !binary |
AQ==
bit_field_false
和bit_field_true
应分别为false
和true
。我也注意到一些奇怪的属性:
0
<%= @room.bit_field_true ? "true" : "false" %>
和<%= @room.bit_field_false ? "true" : "false" %>
,它们都会产生true
如何获得各自的价值?二进制值是否意味着什么?
最终目标是在复选框中显示它们,我有类似的内容:
<% form_for(@room) do |room_f| %>
<%= check_box_tag :room_bit_field_false %><br/>
<%= check_box_tag :room_bit_field_true %><br/>
<% end %>
但它始终显示为未选中状态。我不确定这是如何为这个设置创建复选框,所以这也可能是错误的,但无论我想知道如何在代码中提取位值。
供参考,我正在使用Ruby on Rails 2.3.2,mysql
适配器和mysql Ver 14.14 Distrib 5.5.10, for osx10.6 (i386)
。
答案 0 :(得分:2)
https://stackoverflow.com/a/11394467/111884建议发现比bitfields
简单得多的东西(我无法工作 - 也许是rails 2或其他东西) - 方法getbyte
。< / p>
你可以得到第一位:
bit_field_false.getbyte(0) # Returns `0`
bit_field_true.getbyte(0) # Returns `1`
还发现你可以这样做:
bit_field_false == "\0" # Returns `true`
bit_field_false == "\1" # Returns `false`
bit_field_true == "\0" # Returns `false`
bit_field_true == "\1" # Returns `true`
答案 1 :(得分:0)
如果您只是使用位字段来存储布尔值,我建议您让自己的生活变得更加艰难。
在这里使用布尔字段,这一切都会简单得多。像这样努力工作通常表明你正在反对Rails而不是它。
...话虽如此,我已经使用了bit字段和Redis(用于存储权限)。如果您想在ActiveRecord中执行此操作,像https://github.com/grosser/bitfields这样的插件似乎是一种更好的方法。