레일 : 콘솔에서 경로 도우미의 출력 확인


289

Rails는 경로를 돕는 도우미를 만드는 이름이 지정된 경로로 많은 마법을 정의합니다. 경우에 따라, 특히 중첩 된 경로의 경우 주어진 경로 도우미 메서드 호출에 대해 어떤 URL을 얻을지 추적하기가 약간 혼란 스러울 수 있습니다. Ruby 콘솔을 사용하여 주어진 도우미 함수가 어떤 링크를 생성하는지 확인할 수 있습니까? 예를 들어 post_path (post)와 같은 명명 된 도우미가 주어지면 어떤 URL이 생성되는지 확인하고 싶습니다.

답변:


423

rake routes직접 보여줄 수 있습니다.

Rails 콘솔에서을 호출 할 수 있습니다 app.post_path. 이것은 Rails ~ = 2.3 및> = 3.1.0에서 작동합니다.


7
내 의견에 대한 후속 조치로, Rails 3 콘솔에서 사용할 수있는 것 같습니다. 먼저, app.get "/" 기본적으로 보호되는 원하는 메소드를 instance_eval 과 같이 호출하여 앱 오브젝트에 가짜 요청을 삽입하십시오 . 뭔가 같은 : app.instance_eval{ post_path(post) }
Chubas

위의 Chubas의 의견은 Rails 3에서 작동했습니다. 이것은 테스트를 작성할 때 매우 유용하므로 경로가 정확하지 않다는 것을 알기 위해 1 분을 기다릴 필요가 없습니다. 또한 전화 받기 및 게시를 테스트하는 것이 좋습니다. 먼저 app.get을 호출 할 필요는 없습니다.
B 세븐

7
app.teh_path여전히 Rails 4.0에서 작동하며 기본 응용 프로그램 경로에서 엔진 경로를 분리하는 데 유용합니다.
nurettin

5
예를 들어 엔진을 장착하는 경우 mount Spree::Core::Engine, :at => '/'엔진 이름을 통해 경로에 액세스합니다 (예 :) app.spree_core_engine.some_path. 또는 "engine_name" 이이 코드 와 다르게 설정되어 있다면 그렇게 할 것 app.spree.some_path입니다.
Jordan Brough

다음 host과 같이 매개 변수 를 추가 해야했습니다.app.article_url(my_article, host: 'mydomain.com')
Besi

353

당신은 또한 수

include Rails.application.routes.url_helpers

콘솔 세션 내부에서 헬퍼에 액세스하십시오.

url_for controller: :users, only_path: true
users_path
# => '/users'

또는

Rails.application.routes.url_helpers.users_path

4
이것은 위의 솔루션 IMO보다 훨씬 쉽습니다
Andrew

2
이것은 내 의견으로는 원래 질문에 대한 정답입니다
nemesisdesign

이것은 최고의 답변 IMO 여야합니다
Luke

4
나는 이것을 기억하기 위해 귀찮게 할 수 없으므로 복사 / 붙여 넣기 위해 며칠마다 여기로 돌아옵니다. 감사.
스펜서

1
콘솔에서 직접 url_helpers를 참조 할 수 Rails.application.routes.url_helpers.users_path없습니까?
TheMadDeveloper

25

Rails 콘솔에서 변수 앱은 경로 및 URL 헬퍼를 인스턴스 메소드로 호출 할 수있는 세션 객체를 보유합니다.

app.users_path

11

path_helpers콘솔에서 항상 출력을 확인할 수 있습니다 . 함께 도우미를 사용하십시오app

app.post_path(3)
#=> "/posts/3"

app.posts_path
#=> "/posts"

app.posts_url
#=> "http://www.example.com/posts"

2

경로가 이름 간격 인 경우 다음과 같이 기억하십시오.

product GET  /products/:id(.:format)  spree/products#show

그런 다음 시도하십시오 :

helper.link_to("test", app.spree.product_path(Spree::Product.first), method: :get)

산출

Spree::Product Load (0.4ms)  SELECT  "spree_products".* FROM "spree_products"  WHERE "spree_products"."deleted_at" IS NULL  ORDER BY "spree_products"."id" ASC LIMIT 1
=> "<a data-method=\"get\" href=\"/products/this-is-the-title\">test</a>" 

1
spree예를 들어 주셔서 감사합니다. 당신은 하늘에서 떨어진 천사입니다.
bonafernando
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.