ทำไมรหัสของคุณไม่ทำงาน
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