2012-08-12 35 views
70

Tôi đã khởi động ứng dụng Rails và mọi thứ hoạt động tốt. Nhưng bây giờ, tôi muốn đổi tên một bộ điều khiển và mô hình liên quan:Cách đổi tên bộ điều khiển và mô hình đường ray trong một dự án

Tôi muốn thay đổi bộ điều khiển Corps thành Stores và giống nhau (không có cuối cùng) cho mô hình.

Tìm kiếm trên google, mọi người được đề xuất hủy và sau đó tạo lại bộ điều khiển và kiểu máy. Vấn đề là nó sẽ xóa mã thực của mỗi tệp!

Bất kỳ giải pháp nào? Cảm ơn trước.

Trả lời

142

Dưới đây là những gì tôi sẽ làm gì:

Tạo một di cư để thay đổi tên bảng (cấp cơ sở dữ liệu). Tôi cho rằng chiếc bàn cũ của bạn được gọi là quân đoàn. Nội dung di cư sẽ là:

class RenameCorpsToStores < ActiveRecord::Migration 
    def change 
    rename_table :corps, :stores 
    end 
end 

Thay đổi tên của bạn mô hình tập tin, định nghĩa mô hình lớp học của bạn và các hiệp hội người mẫu:

  • tập tin đổi tên: corp.rb ->store.rb
  • Mã của store.rb: Thay đổi class Corp cho class Store
  • Đổi tên tất cả các liên kết mô hình như has_many :corps ->has_many :stores

Thay đổi tên tập tin điều khiển của bạn và định nghĩa lớp điều khiển của bạn:

  • tập tin đổi tên: corps_controller.rb ->stores_controller.rb
  • Mã của stores_controller.rb: Thay đổi class CorpsController cho class StoresController

Đổi tên lần xem thư mục. Từ corps đến stores.

Hãy thay đổi cần thiết trong đường dẫn trong file config/routes.rb, như resources :corps ->resources :stores, và chắc chắn rằng tất cả các tài liệu tham khảo trong việc thay đổi mã từ đoàn đến cửa hàng (corps_path, ...)

Hãy nhớ để chạy sự di cư :)

Nếu trước đó là không thể, cố gắng xóa các db/schema.rb và thực hiện:

$ rake db:drop db:create db:migrate 
+1

Có thể muốn đề cập đến thay đổi cấu hình/tuyến đường es.rb để chỉ tất cả các tuyến đường: corps đến: lưu trữ tuyến đường – tgf

+0

Tôi chạy 'find -name" oldname_on_singular? * 'để lấy danh sách các tệp cần đổi tên. Sau đó, tôi một bản sao nó trên calc, dán hai lần vào cột thứ hai và thứ ba. Trong cột đầu tiên tôi thêm lệnh đổi tên và cột cuối cùng tôi thay đổi cho tên mới, như sau: 'git mv ./spec/views/oldname ./spec/views/new name' –

8

Ngoài Nob ita trả lời bạn tương tự cần phải thay đổi thử nghiệm & helper định nghĩa lớp học & tên tệp cho corps đến store. Quan trọng hơn bạn nên thay đổi corps thành store trong cấu hình/tuyến đường của mình.rb tệp

Vì vậy, trong tổng số bạn đang thực hiện các thay đổi đối với Bộ điều khiển, Mô hình, Chế độ xem, Tệp trợ giúp, Kiểm tra và tuyến đường được liên kết.

Tôi nghĩ rằng những gì bạn đã thấy được đề xuất với destroy & generate là một lựa chọn tốt hơn. Tôi đã đưa ra câu trả lời cách thực hiện việc này tại đây: Rails : renaming a controlller and corresponding model

3

Một điều quan trọng khác là bạn cần phải cập nhật các liên kết mô hình, bạn sẽ phải thực hiện việc đổi tên thủ công hay phá hủy và tạo tài nguyên (chúng tồn tại trong các mô hình khác). Bạn có thể chạy một di chuyển để thay đổi tên cột của các phím nước ngoài trong cơ sở dữ liệu và thay đổi tất cả tài liệu tham khảo cho những phím nước ngoài trong các mã:

rename_column :table, :old_id, :new_id 

hoặc thiết lập một phím tùy chỉnh nước ngoài khi tuyên bố sự liên kết mà sử dụng chính nước ngoài cũ:

belongs_to :new, foreign_key: "old_id" 

Ngoài ra nếu nguồn của bạn bao gồm hình ảnh, chúng thường được lưu trữ trong một thư mục bao gồm tên tài nguyên nhưng (carrierwave ít nhất) một lần tên của tài nguyên được thay đổi họ sẽ được tham chiếu không đúng cách (tệp tồn tại ở '/uploads/old/image/1/pic.jpg' nhưng được tìm kiếm tại 'tải lên/mới/...'), vì vậy bạn sẽ phải xóa ete và tải lên lại hình ảnh, di chuyển chúng sang đường dẫn mới hoặc có thể thay đổi nơi chúng đang được tìm kiếm.

0

Và nếu bạn có bài kiểm tra mô hình, bạn cần thay đổi:

tập tin đổi tên: corp_test.rb -> store_test.rb (cũng cho kiểm tra bộ điều khiển, kiểm tra tích hợp, cố định, vv)

Mã of store_test.rb: Thay đổi lớp CorpTest cho lớp StoreTest.

Và tất cả các tham chiếu của corp trong bộ kiểm soát, mô hình, tích hợp, kiểm tra lịch thi đấu.

6

Tôi thêm vào câu trả lời của Nobita (mà tôi sẽ bình luận nếu tôi có đủ đại diện), nếu bạn cảm thấy dũng cảm thì những thay đổi đối với tên tệp và tham chiếu đến mô hình trong mã của bạn có thể tự động. Ví dụ, để thay đổi tài liệu tham khảo trong mã của bạn, bạn có thể sử dụng

Số ít, trừ và mayus:

grep -rl corp | xargs sed -i 's/corp/store/g' 
grep -rl Corp | xargs sed -i 's/Corp/Store/g' 

Plural, trừ và mayus (số ít thay số nhiều nếu chỉ nhu cầu số nhiều và s nhân vật ở cuối) :

grep -rl corps | xargs sed -i 's/corps/stores/g' 
grep -rl Corps | xargs sed -i 's/Corps/Stores/g' 

Đổi tên file:

find . -name '*corp*' -exec bash -c 'mv $0 ${0/corp/store}' {} \; 

Và có một tiện ích gọi là đổi tên trên một số hương vị * nix (bao gồm Slackware) mà sẽ giúp bạn đổi tên các tập tin:

shopt -s globstar 
rename -v corps stores app/**/*corps* config/**/*corps* test/**/*corps* 

Kiểm tra đổi tên là những gì bạn nghĩ rằng đó là mặc dù, tôi đã biết phân phối khác giống như Ubuntu để giao hàng với một tiện ích khác có cùng tên (xem https://unix.stackexchange.com/questions/78621/find-rename-command-doesnt-work).Trên Ubuntu bạn sẽ làm điều này thay vì:

shopt -s globstar 
rename -v 's/corps/stores/' app/**/*corps* config/**/*corps* test/**/*corps* 

Lưu ý rằng bạn muốn tránh đổi tên bất kỳ tập tin trong db/trừ khả năng trong tập tin seeds.rb của bạn, vì vậy bạn có thể muốn loại trừ thư mục này và thực hiện bất kỳ thay đổi bằng tay.

0

Là người chỉ hoàn thành quá trình đau đớn này, bước quan trọng nhất của MOST là xây dựng đủ KIỂM TRA để kiểm tra nhiều chức năng nhất có thể. Chúng không chỉ bao gồm mô hình/bộ điều khiển mà bạn định đổi tên mà còn bao gồm tất cả các phần/bộ điều khiển/khung nhìn khác. Dù sao thì đó là một thực hành tốt (hoặc thậm chí là phải).

Thực hiện các bước này bằng cách lặp lại, đôi khi bạn cần phải quay lại các bước vài lần (5 trở lên) để khám phá các tệp bổ sung cần được thay đổi. Và bây giờ cho các bước đổi tên:

  1. Thay đổi tất cả các file (tên và nội dung) bao gồm Corps/Corp-Stores/Store trong db/migrate thư mục
  2. Cố gắng chạy:

    rake db: thả: tất cả

    rake db: tạo

    rake db: di chuyển

  3. Thay đổi nội dung của db/seeds.rb tệp.

  4. Cố gắng chạy: rake db:seed --trace (. Trong bước này, bạn có thể cần phải thay đổi một số tập tin mô hình/điều khiển khác)
  5. Thay đổi test/fixtures tập tin. bạn có thể cần phải thay đổi không chỉ corps.yml mà còn các tệp liên quan khác (một số tệp có thể bao gồm corp_id).
  6. Cố gắng chạy thử nghiệm của bạn, nó tốt hơn để chạy nó với hạt giống cố định (thêm: TESTOPTS="--seed=1981" hoặc bất kỳ số nào khác)
  7. Đổi tên các tập tin (tên và nội dung) được carefull đôi khi bạn cần phải thay đổi thử nghiệm và ứng dụng khác tập tin
0

cho bộ điều khiển bạn sẽ phải thực hiện thay đổi ở những nơi sau đây nếu bạn đang thực hiện nó bằng tay :

  • đường
  • app/vi EWS
  • app/controllers
  • kiểm tra/điều khiển
  • app/helper
  • ứng dụng/tài sản/Javascripts/
  • ứng dụng/tài sản/stylesheets/

cho mô hình, câu trả lời Nobita là khá tốt

1

Bạn cũng có thể thử đá quý Rails Refactor, Công cụ dòng lệnh cho các công cụ tái cấu trúc đơn giản như mô hình đổi tên và bộ điều khiển cho các dự án Rails

Cách sử dụng:

đặt lại tên cơ bản và tái cấu trúc cho các dự án đường ray. Mặc dù đây là không hoàn hảo, chúng sẽ thực hiện rất nhiều công việc cho bạn và tiết kiệm thời gian cho bạn.

Trước khi sử dụng, khuyên bạn nên bắt đầu từ trạng thái lưu trữ sạch để bạn có thể dễ dàng xem lại thay đổi.

Để cài đặt:
gem install rails_refactor

Trước khi sử dụng, chắc chắn bạn cd vào thư mục gốc của dự án đường ray của bạn.

Để đổi tên một bộ điều khiển:
rails_refactor rename OldController NewController

  • đổi tên tập tin điều khiển & tên lớp trong tập tin
  • đổi tên tập tin điều khiển đặc tả tên & lớp trong tập tin
  • đổi tên xem thư mục
  • đặt lại tên tệp trợ giúp & tên mô-đun trong tệp
  • cập nhật các tuyến đường

Để đổi tên một hành động điều khiển:
$ rails_refactor rename DummyController.old_action new_action

  • đổi tên hành động điều khiển trong tập tin lớp điều khiển
  • đổi tên xem file cho tất cả các định dạng

Để đổi tên mô hình:
$ rails_refactor rename OldModel NewModel

  • đổi tên mô hình tập tin & tên lớp trong tập tin
  • đổi tên file spec & tên lớp trong tập tin
  • đổi tên di cư & tên lớp & tên bảng trong tập tin

...

Các vấn đề liên quan