Rails вложенные ресурсы (многие уровни) класс, рассматриваемый как модуль
-
27-10-2019 - |
Вопрос
Это мои модели:
class Company < ActiveRecord::Base
has_many :products
end
class Product < ActiveRecord::Base
belongs_to :company
has_many :prices
end
class Price < ActiveRecord::Base
belongs_to :product
end
Я определил их на маршрутах как вложенные ресурсы
resources :companies
namespace :company do
scope ":company_id" do
resources :products do
resources :prices
resources :production_capabilities
end
end
end
Я хотел поставить контроллеры и взгляды в каталоги, соответствующие этой структуре
app/controllers/companies_controller.rb
app/controllers/company/products_controller.rb
app/controllers/company/product
app/controllers/company/product/prices_controller.rb
Как только я создаю каталог продуктов внутри компании и пытаюсь позвонить
Company.find(1).products
я получил
NoMethodError: undefined method 'quoted_table_name' for Company::Product:Module
Кто -нибудь знает, что я делаю не так?
Решение
Документация Rails явно рекомендует, чтобы мы не гнездировали ресурсы более 1 уровня глубиной:
http://guides.rubyonrails.org/routing.html#nested-resources
Вы получите такие URL -адреса:
/company/1/product/4/price/5
Это не красиво. Старайтесь избегать этого.
Не связан с StackOverflow