Tại sao mọi người đề nghị không sử dụng biến thể hiện cho các chế độ xem trong Ruby on Rails


12

Tại sao tôi nghe nói rằng việc chia sẻ các biến đối tượng giữa các bộ điều khiển và khung nhìn là không tốt. Tôi thích nó bởi vì tôi có thể thấy ngay lập tức thông qua @ rằng một cái gì đó đến từ bộ điều khiển. Tôi thấy một cách hay để sử dụng trình trợ giúp trong bộ điều khiển ở đây: http://www.stephencelis.com/2008/09/06/rails-controllers-view-and-variables.html . Nhưng tôi đang sử dụng cancan cho phần đó.

Câu trả lời:


11

Ý tưởng đã được đưa ra trong các thực tiễn tốt nhất: Thay thế biến thể hiện bằng biến cục bộ

Về cơ bản, nếu bạn không sử dụng nhiều partials hoặc có một chế độ xem đơn giản cho mỗi phương thức điều khiển, chỉ sử dụng các biến đối tượng trong chế độ xem sẽ không thực sự gây ra bất kỳ rắc rối nào.

Tuy nhiên, nếu bạn sử dụng nhiều partials và do đó có nhiều biến đối tượng được khai báo trong bộ điều khiển của bạn ..., có thể sẽ ít gây nhầm lẫn hơn nếu bạn sử dụng thay thế chuyển giao bộ điều khiển (thể hiện) cho các partials một cách rõ ràng. Theo cách đó - trong khi làm việc trong XEM một phần - bạn có một tham chiếu rõ ràng đến biến / đối tượng bạn muốn làm việc không được chia sẻ với các phần 'tất cả' được bao gồm trong quá trình tạo trang.

Rốt cuộc, bạn có thể xử lý việc này giống như bạn muốn xử lý nó, không ai sẽ bảo bạn làm điều đó khác. Tuy nhiên, quan điểm cá nhân của tôi là tôi thích ý tưởng có các tham chiếu rõ ràng trong các phần / quan điểm của tôi mà không thể nhầm lẫn với các biến khác.


5

Bạn có thể nhận được sự tương tự từ globalcác biến hoặc các biến được truyền bằng tham chiếu và nghĩ về các phần như là các hàm. Vì vậy, việc sử dụng biến đối tượng khá giống với biến được truyền cho chức năng như tham chiếu với tất cả các pro và con:

# controller 
def index
  @var = 1
end

#view index.html.erb 
<%= @var %><br/>
<%= render 'foo' %><br/>
<%= @var %>

#partial _foo.html.erb
<%= @var = 2 %>

kết quả sẽ là

1
2
2

Bạn có thể muốn hành vi như vậy, nhưng trong hầu hết các trường hợp, bạn sẽ không cần nó. Và dễ dàng hơn để giới thiệu các lỗi theo cách này và khó hơn để theo dõi chúng. Đó là lý do tại sao điều này được khuyến nghị, bởi vì nó phân tách phạm vi của các biến được sử dụng trong chế độ xem và các phần:

#view index.html.erb 
<%= @var %><br/>
<%= render 'foo', var: @var %><br/>
<%= @var %>

#partial _foo.html.erb
<%= var = 2 %>

kết quả:

1
2
1

2
Đây là một điểm tốt, tôi đã không nghĩ về tính biến đổi của các biến. Tôi đã có giả định về bộ điều khiển "trình bày" các biến cho các khung nhìn nhưng các biến thể hiện chắc chắn có thể đưa ra các lỗi nếu chúng được sửa đổi.
Amala
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.