2008-10-02 30 views
6

Là lười biếng (và thích mã DRY), tôi là loại người sẽ viết một vài trình bao bọc nhỏ để đánh dấu HTML định kỳ. Những cái được cung cấp bởi Rails đã tốt rồi, nhưng đôi khi tôi có cái gì đó cụ thể hơn một chút mà tôi biết tôi sẽ lặp đi lặp lại nhiều lần.Với Rails, tôi nên đặt đoạn mã html ở đâu? Tôi không muốn partials nhưng tôi muốn họ tải lại trong quá trình phát triển

Trong một số trường hợp, một phần có thể là giải pháp, nhưng đôi khi tôi thường gọi đoạn trích quá thường xuyên để biện minh cho chi phí sử dụng partials.

Ngay bây giờ tôi tạo một tệp trợ giúp/html_helper.rb và dán chúng vào đó. Vấn đề là người giúp đỡ không được nạp lại động theo yêu cầu trong quá trình phát triển. Vì vậy, mỗi khi tôi tinh chỉnh đoạn mã của tôi hoặc mã xung quanh nó, tôi phải giết máy chủ và khởi động lại nó.

Đã cấp, nó chỉ là một quy trình 5 giây, nhưng tôi thích sự tiện lợi của Rails chỉ là phát triển và sau đó làm mới trình duyệt. Vì vậy, tôi cũng muốn có điều đó cho các đoạn trích đánh dấu của mình.

Lưu ý: Chỉ cần dán 'không thể tải' bên trong mô-đun trợ giúp không hoạt động.

Trả lời

0

Đây không phải là giải pháp thực sự nhưng bạn có thể sử dụng các bài kiểm tra (TestUnit, RSpec hoặc bất kỳ thứ gì) để đảm bảo người trợ giúp của bạn hoạt động như mong đợi. Bằng cách đó, bạn sẽ không dựa vào việc tải lại tự động những người giúp đỡ của bạn rất nhiều.

1

Câu hỏi hay! Đây là một kỹ thuật tôi nên lạm dụng thường xuyên hơn.

#I go in environment.db (presumably it will work in one of the per-environment files, too.) 
    Dependencies.explicitly_unloadable_constants << 'NameOfHelperToReloadHere' 

Mảng đó bắt đầu trống, không may, ít nhất là trong quá trình cài đặt của tôi. (Được kiểm tra qua bảng điều khiển.)

Tôi đã thử nghiệm tính năng này tại địa phương và nó hoạt động với tôi, ít nhất là trên Rails 2.0.2. Khoản tín dụng chính cho giải pháp thuộc về this gentleman.

+0

Nó hoạt động! Cảm ơn bạn đã tip :-) Lưu ý rằng trong 2.1.1, việc sử dụng phụ thuộc trực tiếp không được chấp nhận và nên được thay thế bằng ActiveSupport :: Phụ thuộc – webmat

+0

Hmmm, tôi đã nói quá nhanh. Đối với một số lý do nó không có vẻ để làm việc với những người giúp đỡ. Tôi sẽ tiếp tục đào bới. – webmat

+0

Bài viết đó kết thúc bằng bình luận kỳ lạ nhất bao giờ :-) Kiểm tra nó! – webmat

1

Nếu bạn gắn chúng vào application_helper.rb, chúng sẽ được tải mọi lúc và có sẵn cho tất cả các chế độ xem của bạn. Điều này được nạp mỗi lần trong chế độ phát triển (hoặc ít nhất là tôi chưa gặp phải bất kỳ vấn đề nào).

Tôi thường sẽ tạo ra ít người trợ giúp mà tôi sử dụng trên toàn bộ trang web (ví dụ như tiêu đề bảng có thể sắp xếp) sử dụng cùng một logic.

+0

Đây phải là giải pháp đúng.Người hỗ trợ nên được tải lại tự động mà không cần thêm bất kỳ mã nào, trừ khi bạn yêu cầu chúng theo cách thủ công (bạn không bao giờ cần phải thực hiện). –

1

này nên tải lại TẤT CẢ những người giúp đỡ về mọi yêu cầu (giả sử bạn đã bị mắc kẹt vào quy ước đặt tên mặc định)

#Put this in config/environments/development.rb 
ActiveSupport::Dependencies.explicitly_unloadable_constants.concat(Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").map {|file| File.basename(file, '.rb').camelize}) 

Hoặc nếu bạn đang sử dụng một phiên bản cũ của Rails (2.0.2 hoặc sớm hơn tôi nghĩ)

#Put this in config/environments/development.rb 
Dependencies.explicitly_unloadable_constants.concat(Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").map {|file| File.basename(file, '.rb').camelize}) 

trình cho tôi trong RoR 2.1.1


Cập nhật: đoạn mã được sửa đổi hàng đầu để bao gồm 'ActiveSupport ::', phải sao chép/dán không chính xác từ mã của tôi.

+0

Tôi đã thử chính xác điều đó. Nó vẫn không nhận các sửa đổi mới được thực hiện cho một trình trợ giúp giữa các lần làm mới. Btw, cả hai đoạn mã của bạn đều nói chính xác điều tương tự ;-) – webmat

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