2013-04-04 25 views
12

Theo ví dụ sau, Thực hành tốt nhất là gì?Thực hành tốt nhất - Chuyển các biến mẫu hoặc sử dụng các tham số trong khung nhìn Ruby on Rails?

Trường hợp 1

controller.rb ...

def index 
    ... 
    @group = params[:group] 
    @team = params[:team] 
    @org = params[:org] 
    ... 
end 

index.html.haml

= link_to @group, '#' 
= link_to @team, '#' 
= link_to @org, '#' 

Trường hợp 2

controller.rb ...

def index 
    ... 

    ... 
end 

index.html.haml

= link_to params[:group], '#' 
= link_to params[:team], '#' 
= link_to params[:org], '#' 

Hoặc có thể có lựa chọn khác, như đi qua chỉ có một biến thể hiện của kiểu Hash ...

Cảm ơn!

Trả lời

7

Nói chung, tốt hơn nên tách các tham số của bạn thành các biến mẫu, đặc biệt nếu bạn cần làm một số việc dọn dẹp chúng. Sử dụng params trực tiếp bên trong một khung nhìn là một chút lộn xộn, và có tác dụng không cần thiết buộc việc xem các cấu trúc của các tham số đến.

Công việc của bộ điều khiển là trung gian giữa các tham số đến và chính chế độ xem đó. Nó sẽ chuyển đổi từ một định dạng này sang định dạng khác để bạn có thể thực hiện thay đổi đối với tham số mà không ảnh hưởng đến chế độ xem và chế độ xem mà không thay đổi các yêu cầu cho tham số.

Thật lạ khi chuyển qua các tham số mà không thực hiện một số loại xử lý trên chúng. Hầu hết thời gian, các tham số đến được sử dụng để lấy các bản ghi từ cơ sở dữ liệu hoặc được sử dụng trong định tuyến trong một số dung lượng.

Thấy ba tham số được chuyển vào và sau đó được sử dụng theo nghĩa đen trên trang không phải là trường hợp sử dụng phổ biến. Tại sao bạn vượt qua những thay vì chuyển một tham chiếu đến một trong những điều này có thể được sử dụng để xác định những người khác?

Ví dụ:

@team = Team.find_by_slug(params[:team_id]) 
@org = @team.org 
@group = @team.group 

Đây là cách các ứng dụng nhất Rails được xây dựng.

+0

Tôi đang lọc Kết quả người dùng theo nhóm, nhóm và tổ chức. Khi tôi lọc theo nhóm, tôi gửi tham số id nhóm (params [: group]), sau đó tôi cũng muốn lọc theo nhóm (giữ bộ lọc nhóm), vì vậy tôi gửi params [: group] đến view được gửi trong yêu cầu tiếp theo với thông số [: team]. – cortex

7

Nếu bạn phải chọn giữa hai điều này chắc chắn # 1, chế độ xem sẽ không sử dụng hàm băm param vì đó là sự kết hợp các mối quan tâm. Đây là vai trò của bộ điều khiển để xử lý các tham số băm và chuẩn bị mọi thứ cho khung nhìn.

Tôi nghĩ rằng một thực tế thậm chí tốt hơn là không sử dụng các biến Ví dụ ở tất cả, nhưng chỉ sử dụng phương pháp helper trong bộ điều khiển của bạn:

def group 
    params[:group] 
end 
helper_method :group 

Và trong giao diện:

= link_to group, '#' 

Trong theo cách này, phương thức này là lười biếng, chỉ được đánh giá nếu được sử dụng.

Ngoài ra, hãy xem

+0

Cảm ơn! ... Có một cái nhìn để ??? – cortex

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