2

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

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

我怎样才能省略== 1or == 0?我试过了:

if @user.settings.show_menu
  # do this
end

但它的评估结果不正确,与使用时相同!@user.settings.show_menu

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

4

1 回答 1

4

在 Rails 中有一个boolean与数据库一起使用的列,它存储为数字并进行相应的转换。通常,这在数据库中被编码为SMALLINT. 如果您有常客INT,您可以随时迁移以转换它们。

迁移示例:

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

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

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

如果没有定义这个方法,你会得到一个异常,可以引导你发现问题。这与让它始终评估为真相比是有利的。

于 2012-11-17T21:37:06.577 回答