使用rails 3/3.1我想存儲發票和它們的項目(以及更多的關聯,比如付款等)。rails和命名空間模型問題
所以在第一種方法我設置了這樣的模式:
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而不是項目,因爲我已經有一個型號命名項目和我不知何故想要命名空間模型發票。但是這個名字有一個巨大的缺點,那就是必須使用invoice.invoice_items而不是直觀的invoice.items。另外,生成的url助手看起來真的很醜,例如「new_invoice_invoice_item_path(invoice)」(注意double 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
現在ASSOCATION是很好的命名,也該網址助手看起來很漂亮。但我無法再使用動態URL(例如[:new,invoice,:item]),因爲控制器設置爲「invoice_item」而不是「invoice/item」。
我想知道別人怎麼解決這個問題,我做錯了什麼。或者這只是一個錯誤在軌道3.0.7/3.1.rc?編號: 對不起,我似乎沒有正確表達我的關注。我的模型項目與發票::項目無關。 Order :: Item也與Item和Invoice :: Item無關。發票::項目只能屬於一張發票。訂單::項目只能屬於訂單。我需要命名空間 - 但爲什麼rails沒有正確支持開箱即用的命名空間?或者我在做什麼錯誤的命名空間?
科林
只是想知道爲什麼你想命名空間項目模型? – Ant 2011-05-31 15:15:00
因爲我有另一個名爲Item的模型。項目是一個真正的通用名稱,可以在很多情況下使用:發票::項目,訂單::項目,... – gucki 2011-05-31 15:19:09
爲什麼不會有發票'has_many:items'?對我來說,如果我要購買物品,那我的發票上就會出現這種情況。另外,你的物品不屬於許多發票?當然,你不會有一個單一的發票。你可能會看到一個HABTM關係。 – 2011-05-31 15:20:06