1

DB を mysql から postgres に変更したところ、次のエラーが発生しました。

ActionView::Template::Error (PG::Error: ERROR:  operator does not exist: character varying = integer
LINE 1: ...ELECT COUNT(*) FROM "agents"  WHERE "agents"."client_id" = 1

するとき

client.agents.count

私はデータが次のように構成されています: クライアントには複数のエージェントがあり、 の場合にのみエージェントを追加できるので、この値を取得して比較するagents.count < Xようなものを使用していますが、そのエラーが発生しています。client.agents.countこれを行うには手動のSQLを使用する必要がありますか? それとも私は愚かな何かを逃していますか?

コメントしてくださってありがとうございます

モデル情報

class Agent < User

  belongs_to :client
  attr_accessible :client_id

  validates :client_id, presence: true


end

class Client < User
  attr_accessible :appId, :expire_date, :legacy, :url, :plan_id, :chat_window_color, :chat_head_color, :chat_box_container_color, :chat_box_color, :tab_message, :greeting, :please_wait_message, :send_message_button, :comments_label, :offline_message

  belongs_to :plan
  has_many :agents, :dependent => :destroy

  has_secure_password

  after_initialize :init

  #omited validations

  private
  #BEGIN PRIVATE METHODS
end

どちらもユーザーから継承します

class User < ActiveRecord::Base
    self.abstract_class = true

  attr_accessible :email, :name, :password, :password_confirmation

  attr_accessor :updating_password

  has_secure_password

  before_save { self.email.downcase! }

  #the controller must set updating_password to FALSE to avoid validation
  def should_update_password?
    updating_password || new_record?    
  end

end
4

1 に答える 1

0

だから私は問題を発見しました。列 client_id は varchar であり、mysql はこれを許可しましたが、postgres は異なるデータ型について不平を言いました。次のようなことを行うことで、管理が機能します。

def up
  rename_column :agents, :client_id, :client_id_old
  add_column :agents, :client_id, :integer
  Agent.reset_column_information
  Agent.find_each { |c| c.update_attribute(:client_id, c.client_id_old) } 
  remove_column :agents, :client_id_old
end

このリンクからHeroku で列の種類を変更するにはどうすればよいですか?.


を使用して postgres のデータ型を直接変更する際の問題を回避しますchange_column。これが他の誰かに役立つことを願っています

于 2012-08-16T16:39:05.363 に答える