เปลี่ยนเส้นทางไปยังรางหน้าปัจจุบัน

ฉันมีแบบฟอร์มลงชื่อเข้าใช้ในแถบนำทางของแอปพลิเคชัน และฉันสงสัยว่ามีวิธีง่ายๆ ในการให้ sign_in เปลี่ยนเส้นทางไปยังหน้าใดก็ตามที่คุณกำลังดูอยู่เมื่อคุณ sign_in หรือไม่ ขอบคุณ!


person user2136807    schedule 11.07.2013    source แหล่งที่มา


คำตอบ (5)


คุณสามารถ redirect_to(:back) ได้ ตราบใดที่มีผู้อ้างอิง อย่างไรก็ตาม ฉันขอแนะนำให้คุณดูคำตอบนี้เพื่อเป็นวิธีแก้ปัญหา แสดงให้เห็นว่าจะมีความยืดหยุ่นต่อสิ่งต่างๆ เช่น การเข้าสู่ระบบที่ล้มเหลวและการเปลี่ยนเส้นทาง OAuth

person Chris Heald    schedule 11.07.2013

ใน Rails 5 คุณควรใช้ redirect_back และเพิ่มเส้นทางสำรอง:

redirect_back(fallback_location: root_path)
person ann    schedule 19.09.2017

หากคุณเขียนโค้ดเพื่อสร้างเซสชันสำหรับผู้ใช้ของคุณ เพียงเพิ่มบรรทัดนี้หลังจากนั้นใน sessions_controller ของคุณ:

redirect_to root_url, :notice => "Logged in!"

ที่นี่แทนที่จะเป็น root_url คุณสามารถป้อนเส้นทางใดก็ได้ที่คุณต้องการให้ผู้ใช้ถูกเปลี่ยนเส้นทางไป แต่ให้แน่ใจว่าคุณมีมันอยู่ใน routes.rb
และหากคุณกำลังพิจารณาว่า sign_in ไม่สำเร็จ คุณสามารถใช้วิธี render เพื่อโหลดมุมมอง sign_in ของคุณซ้ำ

person Erfan Sh.z.    schedule 11.07.2013
comment
ปัญหาคือฉันต้องการให้เส้นทาง redirect_to เปลี่ยนโดยขึ้นอยู่กับตำแหน่งที่ผู้ใช้ที่ไม่ได้เข้าสู่ระบบอยู่บนเว็บไซต์ในปัจจุบัน แถบนำทางสามารถมองเห็นได้ในทุกหน้า ตัวอย่างเช่น หากผู้ใช้อยู่ในหน้าแรกเมื่อพวกเขาลงชื่อเข้าใช้ ฉันต้องการให้ sessons_controller ทำงาน reidrect_to home_path หรือหากพวกเขาอยู่บนหน้าผู้ใช้เมื่อพวกเขาเข้าสู่ระบบ ฉันต้องการให้มันทำงาน redirect_to user_page - person user2136807; 11.07.2013
comment
และคุณมีแบบฟอร์ม sign_in ของคุณในมุมมองอื่นหรือในแถบที่คุณพูดถึงหรือไม่ - person Erfan Sh.z.; 11.07.2013
comment
ตั้งอยู่ในแถบนำทาง ดังนั้นจึงอยู่ในเค้าโครงแอปพลิเคชัน - person user2136807; 12.07.2013
comment
ฉันยังไม่ได้ลอง แต่อย่างที่คุณทราบคุณสามารถเรนเดอร์ไฟล์ .json ในคอนโทรลเลอร์ของคุณได้ ดังนั้นคุณต้องเขียนฟังก์ชันจาวาสคริปต์เพื่อโหลดเพจซ้ำและเรนเดอร์ไฟล์นั้นในคอนโทรลเลอร์ของคุณ บางอย่างเช่น location.reload() - person Erfan Sh.z.; 12.07.2013

วิธีแก้ปัญหานี้จากกลุ่ม Devise ควรทำเคล็ดลับ...

ใน ApplicationController ให้เขียนดังนี้:

after_filter :store_location

def store_location
  # store last url - this is needed for post-login redirect to whatever the user last visited.
  return unless request.get? 
  if (request.path != "/users/sign_in" &&
      request.path != "/users/sign_up" &&
      request.path != "/users/password/new" &&
      request.path != "/users/password/edit" &&
      request.path != "/users/confirmation" &&
      request.path != "/users/sign_out" &&
      !request.xhr?) # don't store ajax calls
    session[:previous_url] = request.fullpath 
  end
end

def after_sign_in_path_for(resource)
  session[:previous_url] || root_path
end
person brntsllvn    schedule 08.08.2015

redirect_back คือสิ่งที่ใช้ได้ผลสำหรับฉัน:

redirect_back fallback_location: root_path
person stevec    schedule 18.06.2021