Trilhos: Verifique a saída do assistente de caminho do console

288

O Rails define um monte de magia com rotas nomeadas que ajudam a suas rotas. Às vezes, especialmente com rotas aninhadas, pode ser um pouco confuso acompanhar o URL que você obterá para uma determinada chamada de método auxiliar de rota. É possível, usando o console do Ruby, ver qual link uma determinada função auxiliar irá gerar? Por exemplo, dado um auxiliar nomeado como post_path (post), quero ver qual URL é gerado.

Derek Thurn
fonte

Respostas:

422

Você pode mostrá-los rake routesdiretamente.

Em um console do Rails, você pode ligar app.post_path. Isso funcionará no Rails ~ = 2.3 e> = 3.1.0.

Chubas
fonte
7
Apenas em um acompanhamento de meu próprio comentário, parece que isso é possível no console do Rails 3, caso você esteja usando. Primeiro, cole uma solicitação falsa no objeto do aplicativo, chamando algo como, em app.get "/" seguida, apenas instance_eval dos métodos desejados, pois agora eles estão protegidos por padrão. Algo como: app.instance_eval{ post_path(post) }
chubas
O comentário de Chubas acima funcionou no Rails 3. Isso é muito útil ao escrever testes, por isso não preciso esperar um minuto para descobrir que a rota não está correta. Além disso, é ótimo testar as chamadas recebidas e postadas. Você não precisa ligar para app.get primeiro.
B Seven
7
app.teh_pathainda funciona no Rails 4.0 e é útil para separar os caminhos do mecanismo dos caminhos principais do aplicativo.
Nurettin
5
Se você estiver montando um mecanismo, por exemplo mount Spree::Core::Engine, :at => '/', você acessaria os caminhos através do nome do mecanismo, como app.spree_core_engine.some_path. Ou, se o "engine_name" estiver configurado para ser algo diferente neste código , você faria app.spree.some_path.
Jordan Brough
Eu tive que adicionar o hostparâmetro da seguinte forma:app.article_url(my_article, host: 'mydomain.com')
Besi
352

você também pode

include Rails.application.routes.url_helpers

de dentro das sessões de um console para acessar os auxiliares:

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

ou

Rails.application.routes.url_helpers.users_path
aghull
fonte
4
Isso é muito mais fácil do que a solução acima IMO
Andrew
2
esta é a resposta certa para a pergunta original na minha opinião
nemesisdesign
Esta deve ser a melhor resposta IMO
Luke
4
Não me incomodo em lembrar disso, então só volto aqui a cada dois dias para copiar / colar. Obrigado.
Spencer #
1
Você também não pode fazer referência aos url_helpers diretamente do console Rails.application.routes.url_helpers.users_path?
TheMadDeveloper 3/16/16
25

No console do Rails, o aplicativo variável contém um objeto de sessão no qual você pode chamar os auxiliares de caminho e URL como métodos de instância.

app.users_path
user3622458
fonte
11

Você sempre pode verificar a saída path_helpersno console. Basta usar o auxiliar comapp

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

app.posts_path
#=> "/posts"

app.posts_url
#=> "http://www.example.com/posts"
Deepak Mahakale
fonte
2

Lembre-se de que sua rota é espaçada pelo nome, como:

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

Então tente :

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

resultado

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
fonte
1
Obrigado pelo spreeexemplo, você é um anjo que caiu do céu.
bonafernando 30/10/19