2017-04-11 14 views
0

メソッドクラスを実行するためのテストクラスを作成しています(メソッドクラスには実行するSQL文があります) しかし、NoMethodError: undefined method 'for nil:NilClass`は与えられた。NoMethodError:未定義メソッド `duration for nil:NilClass

class AverageTimeForFirstReferralTest < ActiveSupport::TestCase 

    def setup 
    user1 = FactoryGirl.create(:user) 
    user2 = FactoryGirl.create(:user) 
    user2.referrer_id = user1.id 
    user2.created_at = 1.month.from_now 
    end 

    def test_creating_view_for_avg_time_for_first_ref 
    AverageTimeForFirstReferral.update_view_command(); 
    assert_equal(1.month * 1.hour, AverageTimeForFirstReferral.first.duration) 
    end 
end 

メソッドクラスは以下の通りです:

class AverageTimeForFirstReferral < ActiveRecord::Base 
    class << self 
    def update_view_command 
     # executing the sql statement 
     self.connection.execute %Q(CREATE OR REPLACE VIEW average_time_for_first_referrals AS 
            SELECT u.id, u.created_at user_created_at, u.referrer_id, r.`created_at` referrer_created_at, TIMEDIFF('r.created_at','u.created_at') as Time_Diff 
            from users u inner join users r 
            on u.`referrer_id`= r.`id` 
            WHERE TIMEDIFF(r.created_at,u.created_at) > 0;) 
    end 
    end 
end 
+0

テーブルに 'AverageTimeForFirstReferral'という行があり、工場の女の子を使用して作成する必要があるようです。 – coderhs

答えて

0

SQL文はそれが理由です。.. AverageTimeForFirstReferralモデルのテーブルにレコードを作成しません。

+0

ありがとうございます。私は自分のTIMEDIFF関数を次のように作成しました。 作成関数TIMEDIFF(start_date DateTime、end_date DateTime)RETURNS decimal(10,2) RETURN Datediff(start_date、end_date)* 24.0 +(end_dateからの抽出) - extract (開始日からの分)/ 60 これは現在動作しています –

関連する問題