Я думаю, что лучшая практика здесь - это пространство имен ваших маршрутов.Ваш класс именуется как MyGem :: User.#link_to
использует #polymorphic_path
, чтобы запросить у класса имя его класса, а затем вызывает #underscorize
для этого имени класса, чтобы получить путь, поэтому предполагается, что путь будет my_gem_user_path, а не user_path.Это означает, что вызов ресурсов должен быть упакован следующим образом:
namespace(:my_gem) do
resources :users
end
Затем my_gem_user_path преобразуется в MyGem :: UsersController.Убедитесь, что ваш контроллер так же расположен в пространстве имен.Если вы не хотите, чтобы маршрут разрешался этому контроллеру, вы можете указать имя контроллера в качестве опции для # resources.
edit: Это интересно, я не думал, что это столкнется с этой проблемой.Возможно, еще есть какая-то конфигурация, чтобы исправить это, поэтому я бы пока не пометил это как решенное.Вы всегда можете заменить polymorphic_path (который вызывается при использовании ориентированного на ресурс пути, как указано выше) именованными маршрутами.Например, вместо link_to «Пользователь», пользователь, вы всегда можете явно использовать link_to «Пользователь», my_gem_user_path Когда вы используете RESTful маршруты в вашем файле rout.rb (с методом #resources), он предоставляет вам эти именованные маршруты.
Для form_for синтаксис немного отличается:
form_for(@user, @task)
становится
form_for([@user, @task], :url => my_gem_user_my_gem_tasks_path(@user, @task), :method => :post)
для новой формы.Для формы редактирования это будет
form_for(@task, :url => my_gem_user_my_gem_tasks_path(@user, @task), :method => :put)
Имеет ли это смысл?Вот ссылка на документацию для form_for http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for