루트 URL을 레일 응용 프로그램의 다른 곳으로 리디렉션하십시오
-
20-09-2019 - |
문제
나는 다음과 같은 경로가 있습니다.
map.namespace 'prepayments', :path_prefix => '/:locale/prepayments' do |prepayment|
prepayment.root :controller => 'login', :namespace => 'prepayments'
...
end
map.redirect '/', :controller => 'prepayments/login' # this is not working
# I tried also
map.root :controller => 'prepayments/login'
내가 얻고 싶은 것은 타이핑 후 www.example.com을 입력 한 후 www.example.com/en/prepayments로 리디렉션한다는 것입니다.
내가 사용했을 때 map.root
위의 예에서 방금 www.example.com에 머물면서 올바른 견해를 제공했습니다 (그러나 그것은 :locale
그리고 그것은 잘 작동했습니다) 나중에 나는 덧붙였다 :locale
내 경로와 현재부터 내 견해 (어떤 형태를 사용하는) 내 견해는 제대로 작동하지 않습니다. 양식의 해당 경로를 찾을 수 없다는 오류가 발생합니다. :locale
.
그렇다면 루트를 다른 페이지로 리디렉션하는 방법은 무엇입니까? 올바른 경로를 생성하고 HTTP 302를 통과해야 할 것입니다. 또는/및 다음과 같은 방법을 만드는 방법은 다음과 같습니다.
map.root :controller => 'prepayments/login', :my_locale => 'en'
편집 : 내 레이크 경로는 다음과 같습니다.
prepayments_root /:locale/prepayments {:controller=>"prepayments/login", :action=>"index"}
prepayments_create /:locale/prepayments/send_email {:method=>:post, :controller=>"prepayments/login", :action=>"send_email"}
prepayments_home /:locale/prepayments/home {:controller=>"prepayments/prepayments", :action=>"home"}
prepayments_save /:locale/prepayments/save {:controller=>"prepayments/prepayments", :action=>"save"}
prepayments_agree /:locale/prepayments/agree {:controller=>"prepayments/prepayments", :action=>"agree"}
prepayments_disagree /:locale/prepayments/disagree {:controller=>"prepayments/login", :action=>"logout"}
prepayments_payment /:locale/prepayments/payment {:controller=>"prepayments/prepayments", :action=>"payment"}
prepayments_payment_email /:locale/prepayments/payment_email {:controller=>"prepayments/prepayments", :action=>"payment_email"}
/:locale/prepayments/:uid {:controller=>"prepayments/login", :action=>"verify"}
redirect / {:controller=>"prepayments/login", :action=>"index"}
편집하다:
나는 개렛이 제안한 방식으로 그것을 시도했고 그것이 효과가 있었다. 나는 경로를 변경했다 :
map.redirect '/', :controller => 'prepayments/login', :action => 'welcome'
컨트롤러에 환영 방법이 추가되었습니다.
def welcome
redirect_to prepayments_root_path(:locale => 'en')
end
그리고 내가 원하는대로 작동합니다 (브라우저에서 URL을 변경합니다).
다른 방법은 다음과 같은 경로를 변경하는 것입니다.
map.root :controller => 'prepayments/login', :locale => 'en'
또한 작동하지만 리디렉션되지는 않습니다 (브라우저에서 URL을 변경하지 않음). 그런 옵션이 있는지 확실하지 않습니다 map.redirect
. www의 예제에서 찾았지만 그러한 기능을 추가하는 플러그인도 발견했습니다.
도와 줘서 고마워!
해결책
컨트롤러를 a로 설정해야합니다 Welcome
또는 그렇지 않은 것은 언제입니다 저것 컨트롤러가 히트하면 원하는 경로로 리디렉션됩니다. 아마도 Rails 3 라우팅이 이와 같은 것들에 더 좋을 수도 있지만 지금은 기본 루트 컨트롤러가 필요합니다.
다른 팁
레일 3에서는 다음을 쓸 수 있습니다.
root :to => redirect('/prepayments')
다음 페이지에는 레일 3 에서이 리디렉션을 수행하는 데 좋은 소개가 있습니다. http://www.railsdispatch.com/posts/rails-routing
옵션 리디렉션 그렇지 않은 것 같습니다 문서화 너무 잘.
여기로 이동합니다 (@Derek, 마지막 예 참조) :
현재 요청 도메인에서 하위 도메인으로 리디렉션
root to: redirect(subdomain: 'foo', path: '/bar') # => foo.example.com/bar
일치하는 경로에서 치환 된 매개 변수로 리디렉션됩니다
get 'stores/:name(*all)', to: redirect(subdomain: 'stores', path: '/%{name}%{all}')
상태 코드로 리디렉션 (예 : 기본값 대신 301)
redirect(path: '/foo', status: 302)
조건부 블록으로 리디렉션합니다
redirect(status: 302) { |params, request|
case request.host
when 'localhost'
'/foo'
when /example.com$/
'/bar'
else
'/baz'
end
}
레일 4 (내 경우 4.2.0)에서 나는 이것을 추가했다. match "*path" => "main#index", :via => [:get, :post]
에게 app/config/routes.rb
.
당신이 그 자리에 놓아야 할 것을 찾기 위해 main
. 이 파일을 봅니다. app/controllers/main_controller.rb
. 다시 말하지만, 당신은 호출되지 않을 수 있습니다 main_controller.rb
, 그러나 그것은 될 것입니다 something_controller.rb
, 아마 아니다 application_controller.rb
또는 servers_controller.rb
. 이 파일에는 다음과 같은 보이는 코드가 표시됩니다.
class MainController < ApplicationController
def index
render :layout => "angular"
end
end
있는 곳 메인 컨트롤러, Rails가 브라우저에서 제공하는 오류 메시지로 여기에서 무엇을 해야하는지 알 수 있어야합니다. 그냥 교체하십시오 기본 안에 match "*path" => "main#index", :via => [:get, :post]
컨트롤러의 접두사가 무엇이든.
이것이 말이되기를 바랍니다. 나도 루비 초보자입니다