Cách đổi tên bộ điều khiển đường ray và mô hình trong một dự án


92

Tôi đã bắt đầu một ứ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 bộ điều khiển và mô hình liên quan:

Tôi muốn thay đổi Corpsbộ điều khiển thành Storesvà giống nhau (không có chữ cái cuối cùng) cho mô hình.

Tìm trên google, mọi người đề nghị phá hủy rồi tạo lại bộ điều khiển và mô hình. 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.

Câu trả lời:


182

Đây là những gì tôi sẽ làm:

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

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

Thay đổi tên tệp mô hình của bạn, định nghĩa lớp mô hình của bạn và các liên kết mô hình:

  • Đổi tên tệp: corp.rb->store.rb
  • Mã của store.rb: Thay đổi class Corpchoclass 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 bộ điều khiển và định nghĩa lớp bộ điều khiển của bạn:

  • Đổi tên tệp: corps_controller.rb->stores_controller.rb
  • Mã của stores_controller.rb: Thay đổi class CorpsControllerchoclass StoresController

Đổi tên các thư mục dạng xem. Từ corpsđến stores.

Thực hiện các thay đổi cần thiết trong các đường dẫn trong config/routes.rbtệp, như resources :corps-> resources :storesvà đảm bảo tất cả các tham chiếu trong mã thay đổi từ xác đoàn thành cửa hàng (đường dẫn quân đoàn, ...)

Hãy nhớ chạy quá trình di chuyển :)

Nếu trước đó không được, hãy thử xóa db / schema.rb và thực thi:

 $ rake db:drop db:create db:migrate

2
Có thể muốn đề cập đến việc thay đổi config / route.rb để trỏ tất cả: các tuyến đường đến: các tuyến đường cửa hàng
tgf

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

Danh sách chính thiếu việc chỉnh sửa các tệp kiểm tra với tên kiểu / lớp mới, được đề cập bởi @EduardoSantana.
user2953607

rake db:droplà siêu nguy hiểm! Tôi khuyên bạn nên xóa dòng này để đổi thành "rake db: migrate"! Mọi người có xu hướng sao chép-dán và chạy!
Sagar Ranglani

10

Ngoài câu trả lời Nobita, bạn cần thay đổi định nghĩa lớp test & helper & tên tệp cho corpsto store. Quan trọng hơn, bạn nên thay đổi corpsthành storetrong config / route.rb của mình tập tin

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

Tôi nghĩ những gì bạn đã thấy được đề xuất với destroy& generatelà một lựa chọn tốt hơn. Tôi đã đưa ra câu trả lời về cách thực hiện việc này ở đây: Rails: đổi tên bộ điều khiển và mô hình tương ứng


7

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

Sử dụng:

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

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

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

Trước khi sử dụng, hãy đảm bảo bạn đã cd tới thư mục gốc của dự án rails của bạn.

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

  • đổi tên tệp trình điều khiển và tên lớp trong tệp
  • đổi tên tệp thông số kỹ thuật của bộ điều khiển và tên lớp trong tệp
  • đổi tên xem thư mục
  • đổi tên tệp trình trợ giúp và tên mô-đun trong tệp
  • cập nhật các tuyến đường

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

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

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

  • đổi tên tệp mô hình và tên lớp trong tệp
  • đổi tên tệp đặc tả và tên lớp trong tệp
  • đổi tên di chuyển & tên lớp & tên bảng trong tệp

...


6

Ngoài câu trả lời của Nobita (tôi sẽ nhận xét 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ể được tự động hóa phần nào. Ví dụ: để thay đổi các tham chiếu 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'

Số nhiều, số trừ và mayus (số ít thay thế số nhiều nếu số nhiều chỉ cần và ký tự s ở 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 tệp:

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

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

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 như Ubuntu xuất xưởng với một tiện ích khác nhau của cùng tên (xem /unix/78621/find-rename-command- không hoạt động ). Trên Ubuntu, bạn sẽ làm điều này thay thế:

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 nào trong db / ngoại trừ có thể trong tệp seed.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 nào theo cách thủ công.


5

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

rename_column :table, :old_id, :new_id

hoặc đặt khóa ngoại tùy chỉnh khi khai báo liên kết sử dụng khóa ngoại cũ:

belongs_to :new, foreign_key: "old_id"

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


0

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

Đổi tên tệp: corp_test.rb -> store_test.rb (cũng dành cho kiểm tra bộ điều khiển, kiểm tra tích hợp, lịch thi đấu, v.v.)

Mã của 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 các bài kiểm tra bộ điều khiển, mô hình, tích hợp, cố định.


0

Là một người vừa hoàn thành quá trình đau đớn này, bước quan trọng NHẤT là xây dựng đủ KIỂM TRA để kiểm tra càng nhiều chức năng càng tốt. 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 mô hình / bộ điều khiển / bộ phận khung nhìn khác. Nhưng dù sao thì đó cũng là một thực hành tốt (hoặc thậm chí có thể là bắt buộc).

Thực hiện các bước này theo nhiều lần lặp lại, đôi khi bạn cần 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 tập tin (tên và nội dung) bao gồm Corps/Corpđể Stores/Storetrong db/migratethư mục
  2. Cố gắng chạy:

    rake db: drop: all

    rake db: tạo

    rake db: di cư

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

  4. Cố gắng chạy: rake db:seed --trace(Trong bước này, bạn có thể cần thay đổi một số tệp mô hình / bộ điều khiển khác.)
  5. Thay đổi test/fixturestệp. bạn có thể cần 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, tốt hơn là 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 thành tệp (tên và nội dung) phải cẩn thận đôi khi bạn cần thay đổi tệp thử nghiệm và tệp ứng dụng khác

0

đối với bộ điều khiển, bạn sẽ phải thực hiện thay đổi ở những nơi sau nếu bạn đang thực hiện thủ công :

  • lộ trình
  • ứng dụng / lượt xem
  • ứng dụng / bộ điều khiển
  • kiểm tra / bộ điều khiển
  • ứng dụng / người trợ giúp
  • ứng dụng / tài sản / javascripts /
  • ứng dụng / nội dung / bảng định kiểu /

đối với người mẫu, câu trả lời của Nobita khá hay

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.