Câu trả lời:
Bạn có thể sử dụng validates_presence_of
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_presence_of
class A < ActiveRecord::Base
has_many :bs
validates_presence_of :bs
end
hoặc chỉ validates
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates
class A < ActiveRecord::Base
has_many :bs
validates :bs, :presence => true
end
Nhưng có một lỗi với nó nếu bạn sẽ sử dụng accepts_nested_attributes_for
với :allow_destroy => true
: Các mô hình lồng nhau và xác thực cha mẹ . Trong chủ đề này, bạn có thể tìm thấy giải pháp.
-------- Đường ray 4 ------------
Đơn giản validates
presence
làm việc cho tôi
class Profile < ActiveRecord::Base
belongs_to :user
validates :user, presence: true
end
class User < ActiveRecord::Base
has_one :profile
end
Bằng cách này, Profile.create
bây giờ sẽ thất bại. Tôi phải sử dụng user.create_profile
hoặc liên kết người dùng trước khi lưu a profile
.
Bạn có thể xác thực các liên kết với validates_existence_of
(là một plugin):
Đoạn mã mẫu từ mục blog này :
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :taggable, :polymorphic => true
validates_existence_of :tag, :taggable
belongs_to :user
validates_existence_of :user, :allow_nil => true
end
Ngoài ra, bạn có thể sử dụng validates_associated
. Như Faisal lưu ý trong phần nhận xét bên dưới câu trả lời, hãy validates_associated
kiểm tra xem đối tượng được liên kết có hợp lệ hay không bằng cách chạy các xác thực lớp liên quan. Nó không kiểm tra sự hiện diện. Điều quan trọng cần lưu ý là một liên kết nil được coi là hợp lệ.
Nếu bạn muốn đảm bảo rằng liên kết có mặt và được đảm bảo hợp lệ, bạn cũng cần sử dụng
class Transaction < ActiveRecord::Base
belongs_to :bank
validates_associated :bank
validates :bank, presence: true
end
validates
thíchvalid: true
thay vì phải gọivalidates_associated
riêng.