ทำไมรหัสของคุณไม่ทำงาน
whereวิธีการส่งกลับActiveRecord :: สัมพันธ์วัตถุ (ทำหน้าที่เหมือนอาร์เรย์ที่มีผลของwhere) ก็สามารถเป็นที่ว่างเปล่า nilแต่มันจะไม่เป็น
Business.where(id: -1)
Business.where(id: -1).nil?
Business.where(id: -1).empty?
จะทดสอบได้อย่างไรว่ามีอย่างน้อยหนึ่งรายการหรือไม่?
ตัวเลือกที่ 1:การใช้.exists?
if Business.exists?(user_id: current_user.id)
else
end
ตัวเลือกที่ 2:การใช้.present?(หรือ.blank?ตรงกันข้ามกับ.present?)
if Business.where(:user_id => current_user.id).present?
else
end
ตัวเลือกที่ 3: การกำหนดตัวแปรในคำสั่ง if
if business = Business.where(:user_id => current_user.id).first
business.do_some_stuff
else
end
ตัวเลือกนี้ถือได้ว่าเป็นกลิ่นรหัสจากเศษผ้าบางชนิด (เช่น Rubocop)
ตัวเลือก 3b:การกำหนดตัวแปร
business = Business.where(user_id: current_user.id).first
if business
else
end
คุณยังสามารถใช้.find_by_user_id(current_user.id)แทนไฟล์.where(...).first
ตัวเลือกที่ดีที่สุด:
- หากคุณไม่ใช้
Businessวัตถุ: ตัวเลือกที่ 1
- หากคุณจำเป็นต้องใช้
Businessวัตถุ: ตัวเลือกที่ 3
whereจะส่งคืนอาร์เรย์ว่างหากไม่มีเรกคอร์ด และ[]ไม่เท่ากันnil