Рейки: Перевірте вихід путівника з консолі


289

Rails визначає купу магії з названими маршрутами, які роблять помічників для ваших маршрутів. Іноді, особливо з вкладеними маршрутами, можна трохи заплутатися, щоб відстежувати, яку URL-адресу ви отримаєте для виклику довідкового методу маршруту. Чи можливо, використовуючи консоль Ruby, побачити, яке посилання буде генерувати певну функцію помічника? Наприклад, з назвою такого помічника, як post_path (post), я хочу побачити, яка URL-адреса генерується.

Відповіді:


423

Ви можете показати їх rake routesбезпосередньо.

На консолі Rails можна зателефонувати app.post_path. Це буде працювати в Rails ~ = 2.3 і> = 3.1.0.


7
Щойно в результаті мого власного коментаря, здається, що це можливо з консолі рейки 3, якщо ви використовуєте. По-перше, вставте підроблений запит у свій об’єкт програми, зателефонувавши на щось на зразок app.get "/" тоді просто instance_eval потрібних методів, оскільки вони захищені за замовчуванням. Щось на кшталт: app.instance_eval{ post_path(post) }
Чубас

Коментар Чубаса вище працював у Rails 3. Це дуже корисно при написанні тестів, тому мені не потрібно чекати 1 хвилини, щоб з’ясувати, що маршрут невірний. Крім того, чудово перевірити отримання та відправлення дзвінків. Вам не потрібно зателефонувати спочатку в app.get.
B Сім

7
app.teh_pathяк і раніше працює в Rails 4.0 і корисний для відділення шляхів двигуна від основних шляхів застосування.
Нуреттін

5
Якщо ви монтуєте двигун, наприклад mount Spree::Core::Engine, :at => '/', ви отримаєте доступ до шляхів через ім'я двигуна, наприклад app.spree_core_engine.some_path. Або, якщо "ім'я_механіка" налаштовано на щось інше, як у цьому коді, тоді ви це зробите app.spree.some_path.
Джордан Бро

Мені довелося додати hostпараметр так:app.article_url(my_article, host: 'mydomain.com')
Бесі

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
Це набагато простіше, ніж вищезазначене рішення ІМО
Андрій

2
це правильна відповідь на початковий на мій погляд питання
nemesisdesign

Це має бути найкращою відповіддю ІМО
Лука

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.