Использование рельсов 3 / 3.1 Я хочу хранить накладные с их товарами (а затем и другими ассоциациями, такими как платежи и т. Д.).
Итак, при первом подходе я настроил модели следующим образом:
class Invoice < ActiveRecord::Base
has_many :invoice_items
end
class InvoiceItem < ActiveRecord::Base
belongs_to :invoice
end
И маршрутам это нравится:
resources :invoices do
resources :invoice_items
end
Я выбрал InvoiceItem вместо Item, потому что у меня уже есть модель с именем Item, и я каким-то образом хочу указать пространство модели для счетов-фактур.Но у этого имени есть огромный недостаток: нужно использовать invoice.invoice_items вместо интуитивного invoice.items.Также сгенерированные помощники URL выглядят очень уродливо, например, «new_invoice_invoice_item_path (invoice)» (обратите внимание на двойной invoice_invoice).
Поэтому я перешел на модели с пространством имен, такие как:
class Invoice < ActiveRecord::Base
has_many :items, :class_name => "Invoice::Item"
end
class Invoice::Item < ActiveRecord::Base
belongs_to :invoice
end
ИRoutes вот так:
resources :invoices do
resources :items, :module => "invoice"
end
Теперь ассоциация названа красиво, а также помощники URL выглядят красиво.Но я больше не могу использовать динамические URL-адреса (например, [: new, invoice,: item]), потому что для контроллера установлено «invoice_item» вместо «invoice / item».
Интересно, как другиелюди решают эту проблему и что я делаю не так.Или это просто ошибка в rails 3.0.7 / 3.1.rc?
РЕДАКТИРОВАТЬ: Извините, кажется, я не правильно выразил свою озабоченность.Моя модель Item не связана с Invoice :: Item.Order :: Item также не имеет отношения к Item или Invoice :: Item.Invoice :: Item может принадлежать только одному счету.Order :: Item может принадлежать только Order.Мне нужно пространство имен - но почему рельсы должным образом не поддерживают пространство имен из коробки?Или что я делаю не так с пространством имен?
Корин