ฉันจะเปลี่ยนเส้นทางไปยังรูท - public/index.html ได้อย่างไร

ฉันต้องการเปลี่ยนเส้นทางไปยัง index.html ในโฟลเดอร์ application/public ของฉัน

def get_current_user
   @current_user = current_user
   if @current_user.nil?  
      redirect_to root_path
   end 
end

ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?

ฉันยังไม่ได้แก้ไขรูทในเส้นทางของฉัน (มันยังคงแสดงความคิดเห็น)

 # root :to => "welcome#index"

ฉันได้รับข้อผิดพลาดแจ้งว่า root_path ไม่ได้ถูกกำหนดไว้

ฉันจะแก้ไข Routes.rb เพื่อให้ root_path ชี้ไปที่ public/index.html ได้อย่างไร


person geeky_monster    schedule 06.06.2011    source แหล่งที่มา
comment
แทนที่จะใช้ root_path ให้ใช้ redirect_to '/'   -  person meagar    schedule 07.06.2011
comment
@meagar เป็นคำตอบ ไม่ใช่แสดงความคิดเห็น แล้วทำไมคุณไม่สร้างคำตอบแทนการแสดงความคิดเห็นในคำถามล่ะ   -  person MBO    schedule 07.06.2011
comment
@MBO มันไม่ใช่คำตอบ คำถามคือฉันจะทำอย่างไร X? และความคิดเห็นของฉันคืออย่าทำ Y แทน นี่ไม่ใช่คำตอบที่ยอมรับได้ของ IMO และฉันจะลงคะแนนให้ผู้อื่นที่โพสต์เช่นนั้น   -  person meagar    schedule 07.06.2011


คำตอบ (5)


สิ่งที่คุณต้องการทำคือไม่รองรับ Rails

Rails คือ MVC, C สำหรับคอนโทรลเลอร์, V สำหรับมุมมอง

ดังนั้นภายในของมันจึงต้องการทั้งสองอย่าง

ตกลง public/index.html จะแสดงตามค่าเริ่มต้น แต่เป็นเพราะกระบวนการถูกข้ามไป

ดังนั้น คุณสามารถสร้างตัวควบคุม static ด้วยการกระทำ index และเป็นมุมมองที่สอดคล้องกัน (เพียงคัดลอก/วางเนื้อหาของ public/index.htmlfile ปัจจุบันของคุณลงไป)

จากนั้นตั้งค่า:

root :to => "static#index"

และโปรดลบไฟล์ public/index.html ออก :)

person apneadiving    schedule 06.06.2011
comment
Rails รองรับการให้บริการเนื้อหาคงที่จากไดเร็กทอรี public นี่คือความเข้ากันได้ของ Rails อย่างสมบูรณ์ - person meagar; 07.06.2011
comment
@apneadiving Rails มาพร้อมกับ public/index.html แบบคงที่นอกกรอบสำหรับทุกโปรเจ็กต์ใหม่และมันก็ใช้งานได้ค่อนข้างดี คุณอาจบอกเขาว่าเขาต้องแตะฐานข้อมูล ไม่เช่นนั้นเขาจะไม่ได้ใช้ 'M' ใน 'MVC' - person meagar; 07.06.2011
comment
Rails ยังเป็น MVC, C สำหรับคอนโทรลเลอร์, V สำหรับการดู ดังนั้นความต้องการภายในทั้งสองอย่างจึงเป็นเท็จโดยสิ้นเชิง ทุกครั้งที่คุณทำ redirect_to คุณไม่ได้ใช้ V ใน MVC - person meagar; 07.06.2011
comment
@meagar ฉันยังใหม่กับ Rails (และโดยทั่วไป MVC) คุณช่วยอธิบายเพิ่มเติมได้ไหมว่าทำไม redirect_to หมายความว่าเราไม่ได้ใช้ 'V' ฉันไม่เข้าใจสิ่งนั้น หากนั่นจำเป็นต้องมีคำถามใหม่สำหรับคำตอบที่ยาว โปรดบอกฉัน ฉันจะสร้างมันขึ้นมา! - person Lucas; 07.06.2011
comment
@Lucas ไม่มี View เกี่ยวข้องเมื่อคุณเรียก redirect_to จากการกระทำของคอนโทรลเลอร์ - person meagar; 07.06.2011

คุณสามารถกำหนดเส้นทางที่มีชื่อให้กับไฟล์คงที่ได้โดยส่งสตริงที่ไม่ว่างเปล่าเป็น :controller และเส้นทางไปยังไฟล์เป็น :action สำหรับเส้นทาง:

Application.routes.draw do

  root :controller => 'static', :action => '/' 
  # or
  # root :controller => 'static', :action => '/public/index.html'

end

# elsewhere

redirect_to root_path # redirect to /

สมมติว่าคุณมี public/index.html นี่คือสิ่งที่จะให้บริการ

person meagar    schedule 06.06.2011
comment
การทำเช่นนี้ยังหมายความว่ามุมมองที่แสดงไม่มีส่วนเกี่ยวข้องกับมุมมองอื่นๆ ในแอปซึ่งไม่น่าเป็นไปได้จริงๆ มุมมองมีเค้าโครงที่เหมือนกัน นั่นคือความสวยงามของ Rails DRYness - person apneadiving; 07.06.2011
comment
@apneadiving การทำเช่นนั้นมีความหมายมากกว่าแค่การขาดเลย์เอาต์ที่ใช้ร่วมกัน แต่ก็ไม่มีอะไรผิดปกติกับสิ่งนั้น หากคุณตั้งใจที่จะให้บริการไฟล์ดัชนีคงที่ สันนิษฐานว่าคุณได้ตัดสินใจว่า ไม่ใช่ รูปแบบทั่วไป และไม่มีเหตุผลใดที่จะไม่ให้บริการ index.html ในลักษณะนี้ - person meagar; 07.06.2011
comment
@meagar โดยสิ้นเชิง จริงๆ แล้ว IMO เป็นตัวเลือกระหว่าง รูปแบบที่ใช้ร่วมกัน (MVC) และ การตอบสนองอย่างรวดเร็ว (ไฟล์คงที่) Rails รองรับทั้งความสวยงามของความยืดหยุ่นของ Rails (ในกรณี MVC ฉันยังคงสามารถใช้ CSS เพื่อให้มีรูปลักษณ์ที่แชร์กันได้) - person Franklin Yu; 21.12.2015

บนตัวควบคุม

 redirect_to root_path ## (will redirect to root '/')
person Rahul Patel    schedule 28.04.2016

ไฟล์เส้นทาง:

     root 'main#index'

ตัวควบคุม:

     class MainController < ApplicationController
       def index
         redirect_to '/index.html'
       end
     end

และการใช้แอคชั่นคอนโทรลเลอร์ของ Rails 4 แบบสด สิ่งนี้สามารถทำงานเหมือนกับแอปพลิเคชันหน้าเดียวโดยใช้ M & C ด้วยการบิดตัว V

person copremesis    schedule 17.11.2015
comment
คุณไม่จำเป็นต้องกำหนดการกระทำ def index ด้วยซ้ำ แค่กำหนดคอนโทรลเลอร์และไฟล์ดัชนีก็เพียงพอแล้ว Rails จะข้ามการดำเนินการในเส้นทางหากไม่พบ - person LessQuesar; 03.04.2017

เส้นทาง.rb

...
root to: redirect('public/index.html')
...

สิ่งนี้จะเปลี่ยนเส้นทางคำขอทั้งหมดไปที่ '/' ถึง 'public/index.html'

person eriel marimon    schedule 12.01.2020