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