Tại sao mã của bạn không hoạt động?
Các where
trở về phương pháp một ActiveRecord :: Quan hệ đối tượng (đóng vai trò như một mảng chứa các kết quả của where
), nó có thể để trống nhưng nó sẽ không bao giờ cónil
.
Business.where(id: -1)
Business.where(id: -1).nil?
Business.where(id: -1).empty?
Làm thế nào để kiểm tra nếu có ít nhất một bản ghi tồn tại?
Tùy chọn 1: Sử dụng.exists?
if Business.exists?(user_id: current_user.id)
else
end
Tùy chọn 2: Sử dụng .present?
(hoặc .blank?
, ngược lại với .present?
)
if Business.where(:user_id => current_user.id).present?
else
end
Tùy chọn 3: Phép gán biến trong câu lệnh if
if business = Business.where(:user_id => current_user.id).first
business.do_some_stuff
else
end
Tùy chọn này có thể được coi là mùi mã đối với một số loại vải (Rubocop chẳng hạn).
Tùy chọn 3b: Chuyển nhượng biến
business = Business.where(user_id: current_user.id).first
if business
else
end
Bạn cũng có thể sử dụng .find_by_user_id(current_user.id)
thay thế.where(...).first
Lựa chọn tốt nhất:
- Nếu bạn không sử dụng
Business
(các) đối tượng: Tùy chọn 1
- Nếu bạn cần sử dụng
Business
(các) đối tượng: Tùy chọn 3
where
sẽ trả về một mảng trống nếu không có bản ghi nào. Và[]
không bằngnil