Tôi đang cố gắng trừu tượng một số logic cần thiết để cắt xén hình ảnh thành một mô-đun để không làm rối loạn các mô hình của tôi. Mã này được dựa trên http://railscasts.com/episodes/182-cropping-imagesruby bao gồm vs mở rộng
module CroppableImage
def croppable_image(*image_names)
image_names.each do |image_name|
define_method "#{image_name}_sizes" do
{ :cropped => read_attribute("#{image_name}_size").to_s, :large => "800x800>" }
end
define_method "#{image_name}_geometry" do |style|
style ||= :original
@geometry ||= {}
@geometry[style] ||= Paperclip::Geometry.from_file(eval "#{image_name}.path(style)")
end
define_method "#{image_name}_aspect_ratio" do
width, height = read_attribute("#{image_name}_size").split("x")
width.to_f/height.to_f
end
private
define_method "reprocess_#{image_name}" do
eval "#{image_name}.reprocess!"
end
end
end
end
Để đưa điều này vào mô hình của tôi có vẻ như rằng tôi phải sử dụng kéo dài. Tôi nghĩ mở rộng là để bao gồm các phương pháp lớp học. Tôi đến từ một nền tảng java - Tôi nghĩ rằng việc sử dụng mở rộng về cơ bản đã tạo ra phương thức tĩnh trên lớp.
class Website < ActiveRecord::Base
extend CroppableImage
croppable_image :logo, :footer_image
- điều này làm việc
Có vẻ như sau đó những gì tôi đang thực sự mong muốn là tạo ra phương pháp dụ.
class Website < ActiveRecord::Base
include CroppableImage
croppable_image :logo, :footer_image
- Đây ném lỗi "phương pháp xác định 'croppable_image' cho #"
Bất cứ ai có xin giải thích whats going on và nếu tôi nên sử dụng bao gồm hoặc mở rộng trong trường hợp này. Thanks guys
'extend' thêm các phương pháp như phương pháp lớp học, trong khi' include' thêm các phương pháp như phương pháp dụ. – zeacuss