5

Tôi có một trang chi tiết trong ứng dụng Rails 3 có một số biến mẫu. Ví dụ: chế độ xem của tôi có các trường hợp sau:Cách tốt nhất để hợp nhất các biến mẫu (để truyền dữ liệu từ bộ điều khiển đến khung nhìn) trong Rails là gì?

@product 
@program 
@action 
...etc... 

Một số là chuỗi đơn, một số là mảng (kết quả của yêu cầu từ API bên ngoài). Nhìn chung, dữ liệu đến từ ít nhất 3 mô hình.

Câu hỏi của tôi là: Cách tốt nhất để hợp nhất các biến mẫu để chế độ xem và bộ điều khiển của tôi trông sạch hơn (không hy sinh khả năng đọc) là gì? Tôi hiểu câu hỏi là mở và mọi người đều có sở thích riêng của họ, nhưng một số tùy chọn là gì? Tôi đang suy nghĩ dọc theo các dòng kết hợp các biến mẫu vào một đối tượng để mã trước đó trở thành một cái gì đó như thế này:

Details.product 
Details.program 
Details.action 

Cảm ơn rất nhiều!

CẬP NHẬT: Đi tuyến đường đối tượng, có bất kỳ ví dụ hay nào (github, bài đăng blog) thực sự triển khai không?

+1

Sử dụng một băm hoặc một đối tượng hoặc không bận tâm. Bạn sẽ phải có nhiều đối tượng getters hoặc tra cứu khóa băm như bạn sẽ thay đổi các biến. –

+0

Bạn chắc chắn đúng, nó sẽ được nhiều đối tượng getters bất kỳ cách nào tôi làm điều đó. Tôi nhìn vào nó từ quan điểm khả năng sử dụng/tổ chức của xem. Tôi không phải là một fan hâm mộ của đi đường băm, bất kỳ ví dụ tốt về việc đi các tuyến đường đối tượng sau đó? (Tôi sẽ cập nhật các câu hỏi) – user527662

+0

Mẫu trình bày có thể là những gì bạn đang tìm kiếm: http://blog.jayfields.com/2007/03/rails-presenter-pattern.html –

Trả lời

2

Theo ý kiến ​​của tôi, cách tốt nhất để làm sạch hành động điều khiển của bạn là gán ít biến mẫu nhất có thể ở đó. Trong thực tế, tôi cố gắng chỉ gán các biến cá thể trong action/before_filters được lấy trực tiếp từ các tham số được truyền cho nó. Ngoài ra, nói chung tôi cố gắng đẩy nhiều bài tập biến thể ví dụ đến before_filters như tôi có thể để giữ cho các hành động mỏng.

Nhưng cách tốt nhất để cắt giảm phân bổ biến thể hiện trong các hành động là sử dụng trợ giúp xem. Ví dụ nếu bạn hiện đang gán một biến cá thể trong một hành động mà bạn sử dụng để xuất ra một số div với, chỉ cần sử dụng trình trợ giúp xem để thực hiện đầu ra trực tiếp mà không cần phải truyền một đối tượng cho khung nhìn.

Dưới đây là một ví dụ về một before_filter trên một bộ điều khiển:

before_filter :assign_variables, :only => :show 

def show; end 

private 
def assign_variables 
    @product = Product.find(params[:product_id]) 
    @program = Program.find(params[:program_id]) 
    @action = Action.find(params[:action_id]) 
end 
+0

Tôi không nghĩ rằng tôi hoàn toàn có được những gì bạn đang nói: ở cấp độ mô hình, bạn đặt trước bộ lọc để tạo các biến mẫu cụ thể dựa trên các tham số đang được truyền vào (nó chắc chắn không phải là ý của bạn nhưng đây là giải thích tốt nhất của tôi). Tôi đồng ý với những người trợ giúp xem, các tùy chọn tuyệt vời trong một số trường hợp. Bất kỳ ví dụ về một trong hai cách tiếp cận trên github của bạn bởi bất kỳ cơ hội? – user527662

+0

Tôi đã thêm một ví dụ cho bộ điều khiển – weexpectedTHIS

+0

Cảm ơn, điều này làm cho nó rõ ràng. Nó chắc chắn hoạt động nếu tôi muốn tiếp tục sử dụng các biến cá thể nhưng làm cho nó sạch hơn để xem xét. – user527662

1

Bất cứ khi nào bạn thấy mình có nhiều biến Ví dụ trong một hành động điều khiển, nó tốt nhất để sử dụng các mô hình trình bày.

Video này giải thích tất cả mọi thứ trong chi tiết "Ruby on Rails - Presenters & Decorators"

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