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), чтобы он соответствовал фактическому маршруту. Как это могло быть возможно?


person Abdulaziz    schedule 02.05.2016    source источник


Ответы (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

person Devin Mitchell    schedule 02.05.2016
comment
Я работаю над большим проектом с несколькими модулями, используя совершенно несвязанные модели; к сожалению, могут потребоваться пространства имен моделей. - person Abdulaziz; 02.05.2016
comment
Я обновил исходный ответ, поскольку исходный ответ не был тем, что вы могли бы использовать в своем сценарии. - person Devin Mitchell; 02.05.2016