rails 3 xác nhận tính duy nhất trên nhiều thuộc tính


177

Tôi sử dụng Rails 3.0.0.beta4

Tôi muốn thêm một xác nhận về tính độc đáo về hai thuộc tính, điều đó có nghĩa rằng mô hình của tôi là hợp lệ nếu vài 'recorded_at''zipcode'là duy nhất.

Trên một thuộc tính ở đây là cú pháp

validates :zipcode, :uniqueness => true

cảm ơn

Câu trả lời:


333

Trong Rails 2, tôi đã có thể viết:

validates_uniqueness_of :zipcode, :scope => :recorded_at

Trong Rails 3:

validates :zipcode, :uniqueness => {:scope => :recorded_at}

Đối với nhiều thuộc tính:

validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}

7
Tôi sẽ nói rằng về mặt logic, sẽ hợp lý hơn khi nói rằng bạn yêu cầu recorded_atphải là duy nhất trong phạm vi của một mã zip. validate :recorded_at, : uniqueness => { :scope => :zipcode }
Ariejan

2
bạn vẫn có thể thực hiện theo cách 2 đường ray và tôi thấy rằng dễ đọc hơn trừ khi bạn thực hiện một số loại xác thực trên cùng một thuộc tính.
zem

24
bạn sẽ xác nhận một nhóm ba với validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}?
Greg Guida

5
Tôi sẽ nói thêm rằng nếu bạn muốn sử dụng :scopetrên các khóa ngoại, bạn cần sử dụng các :fkey_idký hiệu, thay vì các ký hiệu :fkey, ngay cả khi một "cơ bản" :uniquenesshoạt động trên:fkey
nbarraille

1
Bạn có thể muốn thêm một thông báo lỗi tùy chỉnh như, :message => ' is taken for this recorded date'
laffuste

96

Nhiều tham số phạm vi:

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_id]
end

http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniquety_of

Điều này sẽ trả lời câu hỏi của Greg.


Greg có vẻ thích thú hơn với việc sử dụng phím tắt 'xác thực', vì vậy câu trả lời nhanh hơn cho câu hỏi của anh ấy là "có"
elc

Điều này khá quan trọng để biết, tôi đã tìm kiếm chính xác điều này nếu tôi nên sử dụng _id (hoặc không) khi kiểm tra các liên kết trong phạm vi.
Francesco Belladonna

Câu trả lời này hoạt động trong Rails 4.1.6 validates_uniqueness_of: cart_id, phạm vi: [: location_id,: plug_id]
Conor

6

Đừng làm việc cho tôi, cần đặt phạm visố nhiều

validates_uniquety_of: teacher_id ,: scope s => [: semester_id ,: class_id]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.