Szyny: Sprawdź wyjście pomocnika ścieżki z konsoli

289

Szyny definiują magię z nazwanymi trasami, które pomagają w twoich trasach. Czasami, szczególnie w przypadku zagnieżdżonych tras, może być trochę mylące, aby śledzić, jaki adres URL otrzymasz dla wywołania metody pomocnika trasy. Czy za pomocą konsoli Ruby można zobaczyć, jaki link wygeneruje dana funkcja pomocnika? Na przykład, biorąc pod uwagę nazwanego pomocnika, takiego jak post_path (post), chcę zobaczyć, jaki adres URL jest generowany.

Derek Thurn
źródło

Odpowiedzi:

423

Możesz pokazać je rake routesbezpośrednio.

W konsoli Rails możesz dzwonić app.post_path. Działa to w Railsach ~ = 2.3 i> = 3.1.0.

Chubas
źródło
7
W odpowiedzi na mój komentarz wydaje się, że jest to możliwe z konsoli Rails 3, na wypadek, gdybyś używał. Najpierw przyklej fałszywe żądanie do obiektu aplikacji, wywołując coś takiego jak app.get "/" po prostu instancja_pożądanych metod, ponieważ są one teraz domyślnie chronione. Coś w stylu: app.instance_eval{ post_path(post) }
Chubas
Powyższy komentarz Chubasa zadziałał w Rails 3. Jest to bardzo przydatne podczas pisania testów, więc nie muszę czekać 1 minuty, aby dowiedzieć się, że trasa jest nieprawidłowa. Ponadto świetnie jest testować odbieranie i wysyłanie połączeń. Najpierw nie musisz dzwonić do app.get.
B, 7
7
app.teh_pathnadal działa w Rails 4.0 i jest przydatny do oddzielania ścieżek silnika od głównych ścieżek aplikacji.
nurettin
5
Jeśli np. Montujesz silnik, mount Spree::Core::Engine, :at => '/'możesz uzyskać dostęp do ścieżek za pomocą nazwy silnika, np app.spree_core_engine.some_path. Lub, jeśli „nazwa silnika” jest skonfigurowana tak, aby wyglądała inaczej niż w tym kodzie , zrobiłbyś to app.spree.some_path.
Jordan Brough
Musiałem dodać host parametr:app.article_url(my_article, host: 'mydomain.com')
Besi
353

możesz także

include Rails.application.routes.url_helpers

z poziomu sesji konsoli, aby uzyskać dostęp do pomocników:

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

lub

Rails.application.routes.url_helpers.users_path
aghull
źródło
4
Jest to o wiele łatwiejsze niż powyższe rozwiązanie IMO
Andrew
2
to jest, moim zdaniem, odpowiednia odpowiedź na pierwotne pytanie
nemesisdesign
To powinna być najlepsza odpowiedź IMO
Łukasz
4
Nie mogę się tym martwić, więc wracam tu co kilka dni, aby skopiować / wkleić. Dzięki.
Spencer,
1
Nie możesz również odwoływać się do url_helpers bezpośrednio z konsoli, na przykład Rails.application.routes.url_helpers.users_path?
TheMadDeveloper,
25

W konsoli Rails aplikacja zmienna przechowuje obiekt sesji, w którym można wywoływać pomocniki ścieżki i adresu URL jako metody instancji.

app.users_path
użytkownik3622458
źródło
11

Zawsze możesz sprawdzić dane wyjściowe path_helpersw konsoli. Po prostu użyj pomocnika zapp

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

app.posts_path
#=> "/posts"

app.posts_url
#=> "http://www.example.com/posts"
Deepak Mahakale
źródło
2

Pamiętaj, jeśli twoja trasa jest podzielona na nazwy, np .:

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

Więc spróbuj :

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

wynik

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>" 
Arup Rakshit
źródło
1
Dzięki za spreeprzykład, jesteś aniołem, który spadł z nieba.
bonafernando