2017-03-20 26 views
0

"not_coworker_friend"メソッドまたは "coworker_friend"メソッドを呼び出すときにNoMethodErrorが発生します。私はRuby MVCで働いています。これは、すべてのエラーを生成しません書かれたように私の現在のコード、次のとおりです。Ruby未定義メソッド(モデル内)

class EmergencyTrip < ActiveRecord::Base 

belongs_to :user 

has_attached_file :receipt 
validates_attachment_presence :receipt 

validates_presence_of :trip_cost, :if => :not_coworker_friend 
validates_presence_of :phone_of_person, :if => :coworker_friend 

def not_coworker_friend 
    (self.ride_home_service == "co-worker/friend") ? false : true 
end 

def coworker_friend 
    (self.ride_home_service == "co-worker/friend") ? true : false 
end 

end 

私の目標は「not_coworker_friend」場合にのみ真==領収書を検証することです。

線5 & 6は次のようになります

... 
has_attached_file :receipt, :if => :not_coworker_friend 
validates_attachment_presence :receipt, :if => :not_coworker_friend 
... 

追加 ":=> not_coworker_friend場合、" これらの線にはNoMethodErrorを生成する(:not_coworker_friend:未定義のメソッド `のために」と呼ぶシンボル):,も存在かかわらず9行目でエラーがスローされません9.なぜこれは選択的にエラーを投げるだけですか?そして、私はこれをどのように修正できますか?

+0

それを使用する前に、メソッドを定義します。念のため。 –

+0

メソッドが使用前に定義されるように変更しましたが、これは機能しませんでした。それが8&9行目に関係なく呼び出されたときのエラーはないので、定義する必要があります。 –

+0

このように動作するはずです。多分コンソールをリロードしますか?ブール値で読んでください:https://en.wikipedia.org/wiki/Boolean_data_type – Fallenhero

答えて

2

はこれを試してみてください。

class EmergencyTrip < ActiveRecord::Base 

    belongs_to :user 

    has_attached_file :receipt, :if => Proc.new{|f| f.ride_home_service != "co-worker/friend"} 
    validates_attachment_presence :receipt, :if => Proc.new{|f| f.ride_home_service != "co-worker/friend"} 
end 
+0

@対話的にCあなたは上記を試しましたか? –

+0

ありがとう!あなたは私をたくさん助けました。 –

+0

あなたは歓迎です:) @オブジェクト的にC –