2013-08-12 20 views
9

Tôi có các bảng đã được tạo từ một dự án khác. Tên của chúng được định dạng như aaa_bbb_ccc_ddd (tất cả các số không nhiều và một số phần không phải là từ quy ước). Tôi đã tạo thành công lược đồ từ cơ sở dữ liệu bằng cách đọc this. Nhưng bây giờ tôi phải thực hiện các mô hình thực tế. Tôi đã xem xét RMRE, nhưng chúng thực thi quy ước ActiveRecord trên các bảng của tôi và thay đổi tên của chúng, mà tôi không muốn làm vì các ứng dụng khác phụ thuộc vào các bảng đó.Đường ray: Tạo mô hình từ các bảng hiện có?

Cách tốt nhất để tự động tạo mô hình và lược đồ từ các bảng hiện có là gì?

Trả lời

16

chỉ là một lý thuyết , không chắc chắn cách này sẽ làm việc trong ứng dụng thực tế:

tạo models đặt tên như ActiveRecord ước đòi hỏi, ví dụ cho bảng aaa_bbb_ccc_ddd bạn sẽ tạo ra một mô hình AaaBbb và bản đồ mô hình này để bạn bảng:

class AaaBbb < ActiveRecord::Base 
    self.table_name = "aaa_bbb_ccc_ddd" 
end 

hoặc một ví dụ nhân bản hơn:

class AdminUser < ActiveRecord::Base 
    self.table_name = "my_wonderfull_admin_users" 
end 

Bây giờ bạn sẽ có AaaBbb như tài nguyên ở các tuyến đường có nghĩa là bạn sẽ có một url như:

.../aaa_bbb/... 

và nếu bạn muốn sử dụng tên tên bảng trong url Tôi đoán bạn có thể viết lại các tuyến đường:

get 'aaa_bbb_ccc_ddd/:id', "aaa_bbb#show", as: "aaa_bbb"

một lần nữa, chỉ là một lý thuyết có thể giúp bạn. Tôi đã không làm việc với các trường hợp như vậy được nêu ra nhưng sẽ bắt đầu từ này.


chỉnh sửa

để tự động tạo mô hình từ cơ sở dữ liệu:

https://github.com/bosko/rmre

nhưng tôi nghĩ rằng điều này sẽ tạo ra mô hình theo quy ước đường ray với những cái tên lạ mà bạn sẽ phải để sử dụng làm tài nguyên trong ứng dụng của bạn.


Mẫu tốt mà tôi tìm thấy trên SO trong trường hợp bạn muốn sử dụng một tên mô hình khác nhau từ tên bảng:

class YourIdealModelName < ActiveRecord::Base 
    self.table_name = `actual_table_name` 
    self.primary_key = `ID` 

    belongs_to :other_ideal_model, 
    :foreign_key => 'foreign_key_on_other_table' 

    has_many :some_other_ideal_models, 
    :foreign_key => 'foreign_key_on_this_table', 
    :primary_key => 'primary_key_on_other_table' 
end 
+1

Có cách nào để tự động hóa điều này từ một schema.rb không? Tôi có ~ 20 bảng với ~ 10 cột mỗi. Không muốn mã tên và các thuộc tính bằng tay nếu có thể. – Derek

+0

bạn chỉ nên quan tâm đến các bảng và sử dụng các cột của chúng như chúng. Tôi không chắc chắn bạn có thể thay đổi các cột bằng cách nào đó mà không ảnh hưởng đến ứng dụng khác hoạt động với db này. Về tự động hóa Tôi sẽ nghĩ rằng một bout .. sẽ cập nhật câu trả lời của tôi nếu tôi tìm thấy một cái gì đó hữu ích. – rmagnum2002

+0

Ồ, tôi không nghĩ đến việc thay đổi tên cột.Nó chỉ là ngay bây giờ tôi thậm chí không có một tập tin mô hình kể từ khi tôi đang làm công cụ ngược. Vì vậy, tôi sẽ phải gõ tất cả mọi thứ bao gồm cả 'attr_accessible' công cụ, vì vậy tôi muốn một cái gì đó để tự động tạo ra tất cả các mã mô hình cho tôi. – Derek