导轨和命名空间模型发出

| 使用rails 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
路线如下所示:
resources :invoices do
  resources :items, :module => \"invoice\"
end
现在,该关联的名称很好,URL帮助器看起来也很漂亮。但是我不能再使用动态网址(例如[:new,invoice,:item]),因为控制器已设置为\“ invoice_item \”而不是\“ invoice / item \”。 我不知道其他人如何解决这个问题以及我做错了什么。还是这仅仅是Rails 3.0.7 / 3.1.rc中的错误? 编辑: 抱歉,我似乎没有正确表达我的担忧。我的模型Item与Invoice :: Item不相关。 Order :: Item也与Item或Invoice :: Item不相关。发票::项目只能属于一个发票。一个Order :: Item只能属于一个Order。我需要命名空间-但是为什么Rails不能正确支持开箱即用的命名空间?或者我在命名空间上做错了什么? 科林     
已邀请:
        如果订单项和发票项在现实世界中不是同一对象,那么我将以不同的方式命名它们,而不是尝试命名空间,例如
OrderItem
InvoiceItem
-随着代码库的增长,这将使事情变得更清晰,并且无需进行确保在引用项目的任何地方都使用正确的名称空间。     

要回复问题请先登录注册