문제

나는 다음과 같은 경로가 있습니다.

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] 컨트롤러의 접두사가 무엇이든.

이것이 말이되기를 바랍니다. 나도 루비 초보자입니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top