Rails rake任务使用update_attribute导致Mysql2 ::错误:'字段列表'中的未知列'NaN'

时间:2013-04-25 00:17:10

标签: mysql ruby-on-rails ruby

我遇到了一个错误,我在尝试更新数据库中的字段时似乎无法弄清楚。我通过rake任务使用带update_attribute的rails。奇怪的是,错误与任务或任何方法中未使用的列有关。

我已尝试使用update_attributes以及position.save(validate: false),但它们都会导致相同的错误。任何帮助是极大的赞赏。

错误:

Mysql2::Error: Unknown column 'NaN' in 'field list': UPDATE `positions` SET `is_open` = 0, `cost_per_share` = NaN WHERE `positions`.`id` = 617

跟踪错误的行:

position.update_attribute(:is_open, open)

任务源代码:

namespace :tom do
  desc "Update positions.is_open field"
  task check_if_open: :environment do

    include TomDate

    positions = Position.all
    positions.each do |position|

      if position.orange_highlight == 1
        open = 0
      elsif position.buy_misc == 'EXP' || position.buy_misc == 'ASSIGN' || position.sell_misc == 'EXP' || position.sell_misc == 'ASSIGN'
        if position.profit == 0 && position.loss == 0
          open = 1
        elsif position.profit > 0
          open = 0
        elsif position.loss < 0
          open = 0
        else
          open = 1
        end
      elsif tom_is_date_valid(position.buy_date) || tom_is_date_valid(position.sell_date)
        if position.profit == 0 && position.loss == 0
          open = 1
        elsif position.profit > 0
          open = 0
        elsif position.loss < 0
          open = 0
        else
          open = 1
        end
      else
        open = 1
      end

      position.update_attribute(:is_open, open)

    end

  end
end

1 个答案:

答案 0 :(得分:0)

我将update_attribute行更改为:

后成功运行了更新
sql = "UPDATE positions SET is_open = #{open} WHERE id = #{position.id}"
ActiveRecord::Base.connection.execute(sql)

我不确定update_attribute失败的原因。