1

重複の可能性:
#<ActiveRecord::Relation:0x472d0a0> の未定義メソッド `to_f'

twilio と rails を学習する通話追跡アプリケーションを作成しようとしています。

現在、特定の電話番号が 1 日あたり何件の電話を受けているかをユーザーに示すグラフを作成したいと考えています。

スキーマはユーザー has_many の電話 has_many の呼び出しです。

特定の日の電話の数をカウントするインスタンス メソッドを作成してグラフを作成しようとしましたが、コードを実行しようとするとエラーが発生します。

SQLite3::SQLException: no such column: calls.placed_at: SELECT COUNT(*) FROM "calls"  WHERE "calls"."phone_id" = 44 AND ("calls"."placed_at" BETWEEN '2012-09-15 00:00:00.000000' AND '2012-09-15 23:59:59.999999')

インスタンス メソッドに使用しているコードがよくわかりません。おそらく、間違った列を呼び出しているのでしょう。これに関するあなたの助けは大歓迎です。

私の呼び出しモデルの重要な部分は次のとおりです。

def total_on(date)
  calls.where(placed_at: date.beginning_of_day..date.end_of_day).count
end

ショービューで電話をカウントする方法は次のとおりです

<%= (1.month.ago.to_date..Date.today).map { |date| @phone.total_on(date).to_f}.inspect %>

@phone 変数を定義する方法は次のとおりです

@phone = Phone.find_by_id(params[:id]) 

これが私の完全な電話モデルです(スキーマ参照用)

# == Schema Information
#
# Table name: phones
#
#  id              :integer          not null, primary key
#  name            :string(255)
#  twilio_number   :integer
#  original_number :integer
#  user_id         :integer
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
#

class Phone < ActiveRecord::Base

  attr_accessible :original_number, :user_id, :name, :twilio_number
  belongs_to :user
  has_many :calls, dependent: :destroy

  validates :name, presence: true
  validates :twilio_number, presence: true
  validates :original_number, presence: true
  validates :user_id, presence: true

  default_scope order: 'phones.created_at DESC'

  validate :check_phone_limit, :on => :create

  def check_phone_limit
    if User.find(self.user_id).at_max_phone_limit?
      self.errors[:base] << "Cannot add any more phones"
    end
  end

  def original_number=(value)
    num = value.to_s.gsub(/[^0-9+]/, "")
    write_attribute(:original_number, num.to_i)
  end

def total_on(date)
  calls.where(placed_at: date.beginning_of_day..date.end_of_day).count
end

end

これが私の完全な通話モデルです

# == Schema Information
#
# Table name: calls
#
#  id               :integer          not null, primary key
#  AccountSid       :string(255)
#  From             :string(255)
#  To               :string(255)
#  CallStatus       :string(255)
#  ApiVersion       :string(255)
#  Direction        :string(255)
#  FromCity         :string(255)
#  FromState        :string(255)
#  FromZip          :string(255)
#  FromCountry      :string(255)
#  ToCity           :string(255)
#  ToState          :string(255)
#  ToZip            :string(255)
#  ToCountry        :string(255)
#  CallSid          :string(255)
#  DialCallSid      :string(255)
#  DialCallDuration :string(255)
#  DialCallStatus   :string(255)
#  RecordingUrl     :string(255)
#  phone_id         :integer
#  DialCallMinutes  :integer
#  created_at       :datetime
#  updated_at       :datetime
#

class Call < ActiveRecord::Base
  attr_accessible :AccountSid, :From, :To, :CallStatus, :ApiVersion, :Direction, :FromCity, :FromState, :FromZip, :FromCountry, :ToCity, :ToState, :ToZip, :ToCountry, :CallSid, :DialCallSid, :DialCallDuration, :DialCallStatus, :RecordingUrl, :DialCallMinutes
  belongs_to :phone


  def self.create_from_incoming_call(params)

   user_phone = Phone.find_by_twilio_number(params['To']) #Finds the phone number in the database based on what phone Twilio is calling


    twilio_request_params = {
      :CallSid => params['CallSid'],
      :AccountSid => params['AccountSid'],
      :From => params['From'],
      :To => params['To'],
      :CallStatus => params['CallStatus'],
      :ApiVersion => params['ApiVersion'],
      :Direction => params['Direction'],
        :FromCity => params['FromCity'],
        :FromState => params['FromState'],
      :FromZip => params['FromZip'],
      :FromCountry => params['FromCountry'],
      :ToCity => params['ToCity'],
      :ToState => params['ToState'],
      :ToZip => params['ToZip'],
      :ToCountry => params['ToCountry']
      :phone_id => user_phone.phone_id

    }


    call = Call.new(twilio_request_params)
    call.save  
    return call

  end

  def Call.update_dial_call(params)

    twilio_request_params = {
        :DialCallSid => params['DialCallSid'],
        :DialCallDuration => params['DialCallDuration'],
        :DialCallStatus => params['DialCallStatus'],
        :RecordingUrl => params['RecordingUrl'],
      :DialCallMinutes => (params['DialCallDuration'].to_f/60.to_f).ceil
    }

    call = Call.where( :CallSid => params['CallSid'] ).first
    call.update_attributes twilio_request_params
    call.save

  end


end

私はしばらくこれにこだわっています。どんな助けでも大歓迎です!

4

1 に答える 1

2

呼び出しモデルは標準のrailscreated_atを使用していますが、クエリはplaced_atを使用していましたが、これは存在しません。

于 2012-10-15T19:22:49.160 に答える