2017-12-06 14 views
0

私は車とユーザーモデルを持っています。Rails自己および関連

User.rb 
has_many :cars 

Car.rb 
belongs_to :user 

私は、そのユーザーがmdk_idないnilを持っている場合にのみ、車のモデルにモデルフィールドを検証したいと思います。

これは私が車のモデルを作成する方法である、

user = User.where(mdk_id: b["companyid"]).first 

car = user.cars.build 

はその後Car.rbモデルでは、私がmodelフィールドを検証したいと思います。

試しました。

validates :model if self.user.mdk_id != nil 

ただし、エラーが発生します。

undefined method `user' for #<Class:0x007f973a321a58> 

これをどのように参照できますか? (私はあなたがフィールドの存在を検証する必要があると仮定

validates :model, presence: true, if: proc { |car| car.user.mdk_id? } 

:あなたはCar.rb

にこれらのような
validate :validate_user, on: [:create, :update] 

def validate_user 
    if self.user.mdk_id == nil 
    #display error message here 
    #such as User's mdk_id cannot be null etc. 
    end 
end 
+0

を「次にCar.rbに:

言ってやるが、あなたは次のようにmodelフィールドは車がユーザーを持っており、ユーザーがmdk_idセットを持っている時はいつでも、あなたはそれを行うことができます(必須)値を持つようにしたいですモデル、私はモデルフィールドを検証したいと思います。 - 'モデル'フィールド、プレゼンスで何を検証したいですか?一意?ほかに何か? –

答えて

0

次のような場合はオプションにPROCを渡すことができます必要に応じて、検証を変更することができます)。

このトピックについては、rails guidesをご覧ください。このような検証の追加

+0

'on:[:create、:update]'は冗長です。 –

+0

いいえ、それは有効ですhttp://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#custom-methods – lg86

+0

私は、デフォルトでは 'create'と' update'の両方で実行されることを意味します。言及する必要はありません。 –

0

validates :model if self.user.mdk_id != nil 

がここselfとして動作しませんが、クラスCarですが、検証はCarのインスタンスになります。また、必要な検証のタイプを指定する必要があります。

# car.rb 
validates :model, presence: true, if: -> { self.user && self.user.mdk_id.present? } 
関連する問題