ActionController::UnknownFormat ใน Devise::RegistrationController#new .user ต่อท้าย URL

ฉันเคยทำงานกับ Devise มาก่อนแต่ฉันไม่เข้าใจว่าฉันทำอะไรผิดในครั้งนี้ คำถามที่เกี่ยวข้องทั้งหมดไม่ได้อธิบายเช่นกัน ทันทีที่ฉันคลิกลิงก์สมัครสมาชิก ฉันได้รับข้อผิดพลาดดังนี้

ActionController::UnknownFormat in Devise::RegistrationsController#new

ในบรรทัดที่ 207

(options.delete(:responder) || self.class.responder).call(self, resources, options)
  else
207: raise ActionController::UnknownFormat
  end
end

อย่างไรก็ตามหากฉันเปลี่ยนลิงค์ของฉันจาก

  <%= link_to "Sign up", new_user_registration_path(resource_name) %>

to

  <%= link_to "Sign up", new_user_registration_path %>

หน้าลงทะเบียนโหลดได้ดี สิ่งที่ควรทราบอีกประการหนึ่งคือเมื่อฉันคลิกลิงก์สมัครใช้งาน URL ของฉันดูเหมือน http://localhost:3000/users/sign_up.user และไม่เหมือน http://localhost:3000/users/sign_up ซึ่งควรจะเป็นเช่นนั้น

ฉันอ้างถึง Rails 4 Devise 3.1.1 ActionController::UnknownFormat ใน Devise ::RegistrationsController#new และพบแนวคิดที่จะลบ resources_name และดูเหมือนว่าจะได้ผล อย่างไรก็ตาม ฉันไม่เข้าใจว่าทำไม ขอบคุณล่วงหน้า


person Aakanksha    schedule 25.03.2016    source แหล่งที่มา


คำตอบ (1)


เมื่อคุณส่งทรัพยากรไปยังวิธีการเส้นทางเช่น new_user_registration_path Rails จะพยายามกำหนดเส้นทางไปยังการดำเนินการสำหรับทรัพยากรนั้นและสอดแทรกเข้าไปในเส้นทาง เนื่องจากคุณไม่มีเส้นทางที่มีตัวจับคู่สำหรับทรัพยากรที่กำหนดไว้ Rails จะต่อท้าย .<resource.to_param> ที่ส่วนท้ายของ URL แทน แน่นอนว่านี่ไม่ใช่สิ่งที่คุณต้องการ เนื่องจากการลงชื่อสมัครใช้ไม่จำเป็นต้องใช้ทรัพยากร

เหตุผลที่คุณได้รับข้อยกเว้นเฉพาะนี้ก็คือ เนื่องจาก devise พยายามตอบสนองต่อการตอบกลับหลายประเภท (html, json, xml ฯลฯ) จึงแยกวิเคราะห์ .user เป็นประเภทที่คุณต้องการรับ ดังนั้นจึงเกิดข้อผิดพลาดในรูปแบบที่ไม่รู้จัก

person tpbowden    schedule 25.03.2016
comment
ฉันไม่เข้าใจมัน new_user_registration_path ของฉันชี้ไปที่การลงทะเบียน/ใหม่ แล้วเหตุใดจึงไม่ตรงกับเส้นทาง - person Aakanksha; 25.03.2016
comment
เป็นเช่นนั้น แต่พยายามตอบสนองต่อรูปแบบการตอบกลับ .user ที่ไม่มีอยู่ resource_name.to_param คือ user ซึ่งเป็นสาเหตุว่าทำไมจึงถูกผนวกเข้ากับ URL - person tpbowden; 25.03.2016
comment
ตกลง .. ค่อนข้างสมเหตุสมผล แต่ฉันจะแน่ใจได้อย่างไรว่าแอปจะไม่ใช้ resources_name.to_param ฉันขอโทษที่ถามคำถามโง่ๆ แบบนี้ แต่โปรดอดทนกับฉันหน่อย ฉันเป็นมือใหม่ในแวดวงรถไฟ - person Aakanksha; 25.03.2016
comment
อย่าส่งข้อโต้แย้งใด ๆ ไปยังวิธี new_user_registration_path ในอนาคต - person tpbowden; 25.03.2016
comment
ใช่ ฉันคิดว่าการลบพารามิเตอร์ออกจะช่วยแก้ปัญหาได้ ตอนนี้ฉันก็เข้าใจแล้วว่าทำไมเหมือนกัน ขอบคุณ :) - person Aakanksha; 26.03.2016