【问题标题】:Heroku reading Strings instead of Integers in Rails?Heroku 在 Rails 中读取字符串而不是整数?
【发布时间】:2013-05-12 10:10:36
【问题描述】:

在带有 Postgres 版本 9.1.9 的 Heroku Cedar 堆栈上运行的 Rails 3.2.2 应用程序中。
在执行以下方法时:

class Post < ActiveRecord::Base
  def shared_to_all
    privacy & 1 == 1
  end
end

我遇到了这个错误:

Completed 500 Internal Server Error in 19ms

NoMethodError (undefined method `&' for "0":String):
  app/models/post.rb:75:in `shared_to_all'
  app/controllers/application_controller.rb:212:in `next_post'

“隐私”在 heroku 数据库的 DDL 中定义为“int4 DEFAULT 0”。 该应用程序在本地使用相同的 rails 框架/gems/数据库运行良好,甚至在使用 heroku 运行控制台时:

irb(main):008:0> Post.first.shared_to_all
=> false
irb(main):009:0> Post.first.privacy.class
=> Fixnum
irb(main):010:0> Post.first.privacy & 1 == 1
=> false

【问题讨论】:

  • 这与您的问题无关,但是,您为什么使用按位运算符而不是zero? 方法?
  • @Pigueiras 因为隐私是我使用的位串,而不是一堆布尔列。隐私中的每一位都控制着一些权限。
  • 不太清楚你在做什么,但为什么不使用privacy.present?privacy.to_i 或类似的东西?
  • @mind.blank 隐私始终存在,默认为 0,不能为 nil。只有当它被证明是最佳实践时,我才会进行类型转换,目前,转换整数 .to_i 似乎很愚蠢
  • &amp;&amp;&amp; 是两个完全不同的东西。前者是位运算符,后者是逻辑运算符。 5 &amp; true"string" &amp; true 你不能这样做,它们没有任何意义。

标签: ruby-on-rails postgresql heroku cedar


【解决方案1】:

原来这可能只是数据库迁移中的一个小故障,因为我尝试回滚并再次迁移,现在它似乎工作正常。不知道该问题是否应该删除或留下以防其他人遇到同样的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多