2017-06-28 11 views
0

私はこのエラーをGoogleでよく見ますが、私のケースは少し異なります。私はdelayed_jobを使用してImは実行時にエラーを取得します。 notified_byuserは、それぞれ別々のユーザーです。検証エラーはnotified_byにあります。私はnotified_byの通知コントローラにbelongs_toを作成しました。すべてのすべてでActiveRecord :: RecordInvalid:検証に失敗しました:通知は空白にできません

私delayed_jobモデルcheck_expired.rb

class CheckExpired < Struct.new(:agreement_id) 

    def perform 

     agreement = Agreement.find(agreement_id) 

     if agreement.accepted == false 

      agreement.update_attributes expired: true 
      create_notification_expired agreement 
     end 


    end 



    def create_notification_expired(agreement) 

    puts "method was called" 
    puts "#{agreement.reviser_user_id}" 
    Notification.create!(user_id: agreement.user_id, 
         notified_by_id: agreement.reviser_user_id, 
         agreement_id: agreement.id, 
         notified_by: agreement.reviser_user, 
         description: "Your agreement has expired you have not been charged", 
         identifier: agreement.id, 
         notice_type: 'expired') 



    end 


end 

マイ通知モデル

class Notification < ActiveRecord::Base 
    belongs_to :notified_by, class_name: 'User' 
    belongs_to :user 


    belongs_to :reservation 
    belongs_to :offer 
    belongs_to :agreement 


    validates :user_id, :notified_by_id, :identifier, :notice_type, presence: true 

end 

notified_byは、検証エラーを示しています。

+0

は ''プット "#{agreement.reviser_user_id}" です何かを示している? –

+0

には何も表示されません。メソッドを呼び出すときに合意が間違っていると思いますか? 'perform'から' create_notification_expired'メソッドに 'agreement'を渡さないようにしました –

+0

' create_notification_expired'メソッドを呼び出す前に契約がnilであるかどうかチェックしましたか? –

答えて

1

'Notification.create!'メソッドは、モデル属性とその値だけを取ります。 'notified_by'は通知の属性ではなく、関連性です。 'notify_by:agreement.reviser_user'という行を 'Notification.create!'の内部で削除すると、エラーが消えることがあります。

「agreement.reviser_user_id」はnilである可能性もありますが、エラーの可能性もあります。

通知オブジェクトは、このライン使用してユーザーに連結されている 'notified_by_idを:agreement.reviser_user_id 'notified_by:agreement.reviser_user'、これにそう不要、

関連する問題