Rails #url_for повторяет префикс пространства имен при разрешении URL для вложенного ресурса с пространством имен
Приветствую всех,
У меня есть следующее:
routes.rb
:
namespace :hr do
resources :employees do
resources :skills
end
end
И эти модели:hr/skills.rb
class Hr::Skill < ApplicationRecord
end
hr/employees.rb
:
class Hr::Employee < ApplicationRecord
end
Я пытаюсь сделать #url_for
решиться на hr_employee_skills_path(@employee, @skill)
, я нуждаюсь #url_for
работать таким образом, потому что он используется внутри #simple_form_for
в пределах SimpleForm.
Я пробовал разные комбинации #url_for
чтобы дать мне желаемый генератор пути URL, но ни один не работал:
url_for [Hr::Employee.new, Hr::Skill.new]
NoMethodError: undefined method `hr_employee_hr_skills_url' for main:Object
Также это:
url_for [:hr, Hr::Employee.new, Hr::Skill.new]
NoMethodError: undefined method `hr_hr_employee_hr_skills_url' for main:Object
я просто хотел #url_for
звонить hr_employee_skills_path(employee, skill)
так что это разрешает фактический маршрут. Как это могло быть возможно?
1 ответ
Решение
Проверьте ссылку, но есть опция для модуля, которую вы можете использовать, чтобы помочь с этим:
module Hr
def self.use_relative_model_naming?
true
end
end
Это тогда позволяет это:
url_for([:hr, Hr::Employee.first, Hr::Skill.first, only_path: true])
=> "/hr/employees/1/skills/1"
https://coderwall.com/p/heed_q/rails-routing-and-namespaced-models