Trong nỗ lực giảm trùng lặp mã trong ứng dụng Rails nhỏ của tôi, tôi đã làm việc để nhận mã phổ biến giữa các mô hình của mình. rất tốt.Làm thế nào để viết một mixin Rails trải dài trên mô hình, bộ điều khiển và xem
Các công cụ mô hình được khá dễ dàng, tôi chỉ phải bao gồm các mô-đun ban đầu, ví dụ:
class Iso < Sale
include Shared::TracksSerialNumberExtension
include Shared::OrderLines
extend Shared::Filtered
include Sendable::Model
validates_presence_of :customer
validates_associated :lines
owned_by :customer
def initialize(params = nil)
super
self.created_at ||= Time.now.to_date
end
def after_initialize
end
order_lines :despatched
# tracks_serial_numbers :items
sendable :customer
def created_at=(date)
write_attribute(:created_at, Chronic.parse(date))
end
end
này đang làm việc tốt, bây giờ tuy nhiên, tôi sẽ có một số điều khiển và chế độ code đó là sẽ được phổ biến giữa các mô hình này là tốt, cho đến nay tôi có điều này cho các công cụ sendable tôi:
# This is a module that is used for pages/forms that are can be "sent"
# either via fax, email, or printed.
module Sendable
module Model
def self.included(klass)
klass.extend ClassMethods
end
module ClassMethods
def sendable(class_to_send_to)
attr_accessor :fax_number,
:email_address,
:to_be_faxed,
:to_be_emailed,
:to_be_printed
@_class_sending_to ||= class_to_send_to
include InstanceMethods
end
def class_sending_to
@_class_sending_to
end
end # ClassMethods
module InstanceMethods
def after_initialize()
super
self.to_be_faxed = false
self.to_be_emailed = false
self.to_be_printed = false
target_class = self.send(self.class.class_sending_to)
if !target_class.nil?
self.fax_number = target_class.send(:fax_number)
self.email_address = target_class.send(:email_address)
end
end
end
end # Module Model
end # Module Sendable
về cơ bản tôi đang lập kế hoạch trên chỉ làm một bao gồm Sendable :: Controller, và Sendable :: View (hoặc tương đương) cho bộ điều khiển và khung nhìn, nhưng, có cách nào để làm sạch hơn không điều này? Tôi là sau một cách gọn gàng để có một loạt các mã phổ biến giữa mô hình của tôi, điều khiển, và xem.
Chỉnh sửa: Chỉ cần làm rõ, điều này chỉ cần được chia sẻ trên 2 hoặc 3 mô hình.
Tôi đã chọn câu trả lời này, mặc dù Hoyhoy là hoàn toàn tốt là tốt, chỉ vì nó phù hợp với những gì tôi đang làm tốt hơn một chút. – Mike
Nó thực sự giống nhau. Đây là một cú pháp tốt hơn. – hoyhoy