Làm thế nào để tạo và sử dụng một mô-đun bằng Ruby on Rails 3?


90

Tôi đang sử dụng Ruby on Rails 3 và tôi muốn di chuyển một số mã tùy chỉnh và được chia sẻ trong một mô-đun.

  1. Tôi nên sử dụng cú pháp nào để viết mã mô-đun?
  2. Tôi phải đặt tệp mô-đun vào thư mục nào của ứng dụng?
  3. Làm cách nào để đưa mô-đun đó vào một hoặc nhiều lớp bộ điều khiển?
  4. Hành động nào khác, nếu có, tôi có phải sử dụng mô-đun tùy chỉnh ở bất kỳ đâu trong ứng dụng của mình không?
  5. Làm cách nào để gọi các phương thức trong mô-đun từ ứng dụng của tôi?

Cảm ơn trước.


2
Rất tốt! Tôi cần nó.
Arup Rakshit

Câu trả lời:


115

Để 1. Một mô-đun được tạo / mở bằng cách chỉ cần nói:

module MyModule
  def first_module_method
  end
end

Tới 2. libThư mục. Nếu bạn muốn sắp xếp các mô-đun của mình trong libthư mục, bạn có thể đặt chúng vào chính các mô-đun. Ví dụ: nếu bạn muốn có một thư mục con, super_modulescác mô-đun của bạn sẽ được định nghĩa như sau:

module SuperModules
  module MyModule
    def first_module_method
    end
  end
end

Đến ngày 3/5. Khi bao gồm mô-đun trong một lớp, bạn có thể chỉ cần gọi các phương thức mô-đun như thể chúng được định nghĩa trong lớp:

class MyClass
  include MyModule
  def some_method
    first_module_method #calls module method
  end
end

4. Đầu tiên, hãy đảm bảo rằng mô-đun của bạn thực sự cần thiết trong mọi lớp ứng dụng của bạn. Nếu không, chỉ nên đưa nó vào nơi cần thiết để không làm phình ra các lớp không cần nó. Nếu bạn thực sự muốn mô-đun ở khắp mọi nơi, hãy bao gồm việc xem xét phân cấp lớp của các lớp của bạn trong ứng dụng. Bạn có muốn mô-đun trong tất cả các mô hình? Bạn có thể mở ActiveRecord :: Base và thêm mô-đun của bạn vào đó.


2
Để sắp xếp các tệp, tôi có thể tạo một thư mục con trong thư mục 'lib' không? Nếu vậy, những gì thay đổi?
user502052

2
@ user502052 Tôi đã cập nhật câu trả lời cho điểm 2 để trả lời câu hỏi đó.
Stephan

3
Nhiều điều không rõ ràng ở đây. Tên tệp nào để cung cấp? Làm thế nào để gọi các phương thức khi không bao gồm tất cả các mô-đun? Tôi không thể tin rằng có nhiều phiếu ủng hộ đến vậy vì cuối cùng tôi vẫn không biết cách sử dụng một mô-đun.
Augustin Riedinger

5
Khi bạn tạo ra một mô-đun như trên bằng cách bao gồm nó trong libthư mục, một lưu ý quan trọng là cho phép Rails3 uncomment một số dòng trong config\application.rbcho config.autoload_paths- đọc ví dụ, stackoverflow.com/questions/1073076/rails-lib-modules-and ... Note Ngoài ra, bạn phải cẩn thận sử dụng tên tệp cho mô-đun của mình khớp với chính tên mô-đun. Vì vậy, nếu bạn lưu nó vào lib/test/my_module.rb, bạn phải include Test::MyModule- để biết thêm chi tiết, hãy xem stackoverflow.com/questions/4073856/rails-3-autoload
cùng một

6
Tôi chỉ tìm thấy câu trả lời cũ này của tôi. :( Tôi muốn phản đối. Đừng đặt bất cứ thứ gì vào lib! Hãy đặt mã của bạn (bao gồm cả các mô-đun bổ sung) vào app/modelsnếu mã cần truy cập vào các mô hình khác. Nếu mã của bạn thực sự là một 'thư viện' và có thể tự tồn tại, tôi đề xuất cung cấp đá quý. Ví dụ: xem github.com/shageman/the_next_big_thing
Stephan

3

A> 1. Bạn có thể sử dụng cú pháp tương tự như bất kỳ lớp ruby ​​nào khác. Ví dụ: tôi đang xác định một mô-đun VehicleClassifer sẽ sử dụng phương thức phân loại_vehicle để phân loại một chiếc xe dựa trên số bánh xe mà nó nhận được làm đầu vào.

module VehicleClassifer
  def classify_vehicle(number_of_wheels)
    VehicleType.where("number_of_wheels = ?", number_of_wheels)
  end
end

A> 2. Các mô-đun thường được lưu trữ trong thư mục / lib.

các câu hỏi 3,4,5 ít nhiều có câu trả lời giống nhau. bạn có thể dùng

class SomeController < ApplicationController
  include VehicleClassfier

  def index 
    classify_vehicle(4)  
  end
end

trong lớp mà bạn đang sử dụng mô-đun và bạn sẽ có quyền truy cập vào tất cả các phương thức của mô-đun.

Ngoài ra, trong trường hợp bạn cần sử dụng một mô-đun thông qua ứng dụng của mình, bạn có thể đưa nó vào bộ điều khiển ứng dụng của mình.


2
Tôi đã thử cái này và gặp lỗi phương pháp không xác định. Bất kỳ ý tưởng về những gì Tôi đang làm sai?
Tony

Bạn có chắc rằng mô-đun của bạn có thể truy cập được không? stackoverflow.com/questions/6604272/… có thể giúp bạn?
Shreyas

1
@Tony - Bạn có thể cần phải khởi động lại máy chủ của mình - ngay cả trong chế độ nhà phát triển, để có được các phương thức của mô-đun. Và mỗi khi bạn thay đổi mã trong mô-đun của mình, bạn phải khởi động lại máy chủ. Ví dụ, nếu một lỗi, hoặc nó sẽ báo lỗi trên mã cũ, nhưng đánh dấu mã mới trên dòng đó trong thông báo lỗi - rất khó hiểu.
JosephK

Bất kỳ ý tưởng nào về cách bao gồm và sử dụng các mô-đun tùy chỉnh đó bên trong ApplicationHelper?
WM
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.