Rails将整数评估为布尔值

时间:2012-11-17 21:18:42

标签: ruby ruby-on-rails-3

我有一个模型,用户将设置存储为0或1(对于true / false)。在我的代码中,我必须这样做:

if @user.settings.show_menu == 1
  # do this
end

如何忽略== 1== 0?我试过了:

if @user.settings.show_menu
  # do this
end

但它并没有评估为真,与使用!@user.settings.show_menu

时相同

这是漫长的一天,请指导我正确的方向。谢谢!

1 个答案:

答案 0 :(得分:4)

在Rails中,有一个boolean列用于数据库,该数据库存储为数字并相应地进行转换。通常,它在数据库中编码为SMALLINT。如果您有常规INT,则可以随时迁移以转换它们。

示例迁移:

change_table :table_name do |t|
   t.change(:boolean_column, :boolean)
end

在您的应用程序中,标准做法是使用?方法版本引用布尔标志,如:

if (@user.settings.show_menu?)
  # ...
end

如果未定义此方法,您将获得一个异常,可以引导您发现问题。这与将其始终评估为真实相比是有利的。