คลิปหนีบกระดาษหลายไฟล์จะถูกบันทึกโดยไม่ต้องระบุอินพุตไฟล์

ฉันมีโมเดลผู้ใช้ซึ่งมีการเชื่อมโยง has_many ของโมเดลสินทรัพย์ (การตั้งค่าคลิปหนีบกระดาษมาตรฐาน) ในมุมมอง ฉันใช้ fields_for helper เพื่อตั้งค่าฟิลด์ไฟล์จำนวนหนึ่งสำหรับเนื้อหา เมื่อผู้ใช้ไม่ได้ระบุไฟล์ บันทึกสินทรัพย์จะไม่ถูกบันทึก นั่นคือสิ่งที่ฉันต้องการ จนถึงตอนนี้ดีมาก

จากนั้นฉันก็เพิ่มแอตทริบิวต์คำบรรยายให้กับโมเดลสินทรัพย์ ฉันยังใส่ฟิลด์ข้อความให้กับแต่ละฟิลด์ไฟล์ที่เกี่ยวข้องด้วย มาถึงปัญหา.. เมื่อผู้ใช้ไม่ได้ระบุไฟล์หรือคำบรรยาย บันทึกเนื้อหาจะถูกบันทึกไว้ บันทึกที่บันทึกไว้มีคำบรรยายเป็นสตริงว่าง โดยแอตทริบิวต์คลิปหนีบกระดาษอื่นๆ ทั้งหมดจะเป็นศูนย์

คำถามคือฉันจะป้องกันไม่ให้บันทึกสินทรัพย์ได้อย่างไรเมื่อไม่มีไฟล์ที่กำหนดให้กับแอตทริบิวต์คลิปหนีบกระดาษ และเนื่องจากเนื้อหานี้เป็นทางเลือก ฉันจึงไม่ต้องการให้สร้างความคิดเห็นเกี่ยวกับข้อผิดพลาดใดๆ มีความคิดอะไรบ้าง? ขอบคุณ.




คำตอบ (1)


คุณสามารถทำ validates_presence_of :caption ในโมเดลสินทรัพย์ของคุณได้ แต่นั่นก็ทำให้จำเป็นต้องมีคำอธิบายภาพด้วย แล้วการตรวจสอบว่ามีไฟล์อยู่ในเนื้อหาทั้งหมดที่เชื่อมโยงกับผู้ใช้ before_validation เป็นอย่างไร อะไรแบบนี้อาจจะ? (อาจต้องมีการปรับแต่งบ้าง)

class User < AR::Base
  has_many :assets, :dependent => :destroy

  before_validation :check_assets

  def check_assets
    self.assets.each do |asset|
      unless asset.attachment.file?
        if asset.new_record?
          self.assets.delete(asset)
        else
          asset.destroy
        end
      end
    end
  end
end
person Peter Duijnstee    schedule 26.08.2012
comment
ความคิดที่ดี! นั่นจะทำสิ่งที่ฉันต้องการอย่างแน่นอน! ขอบคุณมาก ๆ! การปรับแต่งอย่างหนึ่งคือการทำซ้ำสำเนาของทรัพย์สินเพื่อให้ Assets.delete(asset) ทำงานได้ดี - person Ziyu; 27.08.2012