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

Другие вопросы по тегам