【问题标题】:Why do I have to add .to_i for Postgresql to know this field is an integer?为什么我必须为 Postgresql 添加 .to_i 才能知道该字段是整数?
【发布时间】:2010-09-26 18:17:55
【问题描述】:

以下行在 MySQL 中运行良好,但在 Postgresql 中我收到 Rails 错误,指出“无法将 Fixnum 转换为字符串”。

viewable.update_attribute(:total_views, viewable.total_views.to_i + 1)

total_views 是一个整数字段

即使我使用 Postgresql,Rails 是否应该知道将 total_views 视为整数?

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    简短的回答是“是”Rails 应该知道如何将该列反序列化为整数。您使用的是什么版本的 Rails 和什么 Postgres 适配器?

    不过,作为奖励,您可以执行以下操作来完成您想要的:

    viewable.increment(:total_views)
    

    【讨论】:

    • p = self.total_likes.to_i + self.total_cmets.to_i * 2 注意我必须调用的 .to_i 方法。我在 Heroku 上使用 Rails 2.3.4。
    • postgres (0.7.9.2008.01.28) 是安装在 Heroku 中的 gem
    • 当我删除 .to_i 方法调用并在 MySQL 上进行测试时,它运行良好。但是在 Postgresql 下我得到了错误。
    • 字段设置为 NOT NULL 和 DEFAULT 0
    • 我很惊讶没有其他人遇到这种情况。
    【解决方案2】:

    我不确定你是否会遇到同样的问题

    update_attributes
    

    方法。自从

    update_attribute
    

    方法跳过 Rails 验证。尝试使用前者,您可能会更好地了解幕后发生的事情。

    【讨论】:

    • 不确定验证会如何产生影响,但也许它们会调用显示字段。我试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2013-01-10
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多