2017-12-06 6 views
0

Ich habe ein Auto und ein Benutzermodell.Schienen selbst und association

User.rb 
has_many :cars 

Car.rb 
belongs_to :user 

Ich mag Modellfeld im Automodell validieren nur, wenn der Benutzer mdk_id nicht null hat.

Dies ist, wie ich Auto-Modell zu erstellen,

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

car = user.cars.build 

Dann in Car.rb Modell würde Ich mag model Feld validieren.

Ich habe versucht;

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

Aber es gibt Fehler;

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

Wie kann ich darauf verweisen?

+0

„Dann in Car.rb Modell möchte ich das Modellfeld validieren. " - Was möchten Sie auf "Modell" -Feld, Präsenz bestätigen? Einzigartigkeit? was sonst? –

Antwort

1

Sie können eine proc auf den Pass, wenn die Option wie folgt aus:

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

(ich nahm Sie Anwesenheit des Feldes bestätigen müssen , Sie können die Validierung ändern, wenn Sie benötigen).

Bitte überprüfen Sie die rails guides zu diesem Thema.

0

Sie können in Car.rb wie diese tun

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

'on: [: create,: update]' ist überflüssig, glaube ich. –

+0

Nein, es ist gültig check http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#custom-methods – lg86

+0

Ich meine, standardmäßig wird es sowohl auf 'create' und' update' laufen. Keine Notwendigkeit, es zu erwähnen. –

0

eine Validierung wie folgt hinzu:

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

nicht als self arbeiten hier ist die Klasse Car aber die Validierung auf einer Instanz von Car wäre. Darüber hinaus müssen Sie angeben, welche Art von Validierung Sie möchten.

Sag mal, wollen Sie das model Feld einen Wert (obligatorisch) haben, wenn ein Auto einen Benutzer und Benutzer hat mdk_id gesetzt, dann können Sie es wie folgt:

# car.rb 
validates :model, presence: true, if: -> { self.user && self.user.mdk_id.present? }