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.

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.


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

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

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"

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>" 

1
Dzięki za spreeprzykład, jesteś aniołem, który spadł z nieba.
bonafernando
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.