Неявное создание инструкций helpers — routes.rb и ‘match’

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я читаю «Rails 3 Way» Оби Фернандеса, и я не уверен, что правильно понял кое-что из этого. Я новичок в rails и хочу убедиться, что я правильно это понимаю. У меня есть некоторый опыт работы с ванильным Ruby. Немного, но есть.

Рассматриваемый текст выглядит следующим образом: (относительно маршрутизации и файла config / routes.rb)

«…

Путем создания маршрута, подобного

 match 'auctions/:id' => "auction#show", :as => 'auction'
  

вы получаете возможность использовать удобные вспомогательные методы в таких ситуациях, как

 link_to item.description, auction_path(item.auction)
  

…»

Мой вопрос в том, конкретно какая часть match 'auctions/:id' => "auction#show", :as => 'auction' создает вспомогательные функции? (например, link_to auction и auction_path() ) Является ли это :as => 'auction' частью? Будут ли какие-либо помощники созданы без добавления :as => 'auction' ?

Мое замешательство связано с другими руководствами, которые я видел, где это опущено, и все же помощники, похоже, создаются независимо. Что конкретно rails использует в match инструкциях в файле routes.rb для создания помощников? Если это не :as => 'auction' часть, то какова конкретная цель добавления этого к match инструкции?

Я знаю, что это кажется сверхосновным вопросом, но эта деталь, похоже, замалчивается в текстах, которые я прочитал до сих пор. Заранее спасибо за любой свет, который вы можете пролить на это.

Ответ №1:

Я только что попробовал это:

 match "alfa/beta", to: 'users#new'
  

В этом случае, даже без :as => 'named_route' , я получил бесплатно следующего помощника

 alfa_beta_path
  

которое, как и ожидалось, указывает на users#new .
Итак, похоже, что помощники также автоматически генерируются путем синтаксического анализа строки маршрута, в случае отсутствия :as спецификации.

Ответ №2:

Да, это :as => 'named_route' часть, которая создает именованный маршрут (который, в свою очередь, создает помощников). Что касается того, чтобы оставить это без внимания, вы имеете в виду экземпляры resources :something in routes.rb ? resources Метод автоматически генерирует набор помощников URL на основе имени ресурса.

Комментарии:

1. Спасибо за ваш ответ. Я имею в виду код других пользователей, который я прочитал на github, чтобы попытаться ознакомиться с тем, как работает rails, и мои собственные попытки разобраться с rails на сегодняшний день. (У меня около недели опыта работы с rails и около 6 месяцев опыта работы с ruby.) У меня начинает складываться ощущение, что мне было бы лучше вообще не знать ни о каком ruby, занимающемся этим. Это проливает много света на проблемы, с которыми я сталкивался до сих пор с помощниками. Я бы улучшил ваш ответ, если бы у меня было немного больше репутации. Еще раз спасибо!

2. Был порог знаний (по крайней мере, для меня), когда Rails перестал быть таким «волшебным» и начал обретать смысл. Код Rails может быть немного перегружающим, но его чтение — отличный способ увидеть, как все работает. Я думаю, в конце концов, вам будет лучше знать Ruby до того, как вы начали изучать Rails.