2012-01-25 38 views
6

tôi có phương pháp thử nghiệm trong những người giúp đỡ/application_helper.rb file:Sự khác nhau giữa <% ... %> và <%= .. %> trong đường ray 3

def test 
    concat("Hello world") 
end 

Sau đó, trong index.html.erb tôi gọi như:

Blah 
<% test %> 

Các trình duyệt hiển thị:

Blah Xin chào thế giới

Đó là bình thường, nhưng nếu tôi thay đổi

<%= test %> 

màn hình hiển thị trình duyệt:

Blah Xin chào worldBlah Hello world

Nó lặp lại tất cả các trang. Tôi không biết tại sao? Sự khác nhau giữa chúng là gì? Cảm ơn sự giúp đỡ của bạn!

+1

Có lý do cụ thể nào bạn đang sử dụng 'concat' không? –

Trả lời

10

Từ the Rails docs, concat chỉ được sử dụng trong khối mã <% %>. Khi bạn sử dụng nó trong một khối mã <%= %>, bạn sẽ thấy nó hai lần vì concat nối văn bản được cung cấp vào bộ đệm đầu ra, nhưng sau đó nó cũng trả về toàn bộ bộ đệm đầu ra về phương thức trợ giúp của bạn, sau đó được xuất bởi <%=, toàn bộ trang được sao chép.

Thông thường, bạn không cần phải sử dụng concat nhiều nếu có (tôi chưa bao giờ gặp phải một tình huống mà tôi cần đến nó). Trong trợ giúp của bạn, bạn chỉ có thể thực hiện việc này:

def test 
    "Hello world" 
end 

Và sau đó sử dụng <%= test %> trong chế độ xem của bạn.

+0

Được rồi, thưa ngài. –

+0

Cảm ơn Dylan Markow, bạn có thể chỉ cho tôi <% %> và <%= %> được sử dụng trong trường hợp nào? Tôi sử dụng nhiều concat trong phương pháp trợ giúp của tôi, nó có tốt không? Nếu không, làm thế nào để giải quyết? (Tôi sử dụng concat để viết thẻ html trong phương thức trợ giúp) – banhbaochay

13

Thông thường, <%%> là đoạn mã Rails (tức là bắt đầu điều kiện, kết thúc điều kiện, v.v.), trong khi <% =%> thực sự đánh giá biểu thức và trả về giá trị cho trang.

9

Sự khác biệt là gì?

<% %> bạn hãy đánh giá các mã đường ray theo quan điểm của bạn

<%= %> bạn hãy đánh giá các mã đường ray theo quan điểm của bạn và in ra một kết quả trên trang

Ví dụ # 1: Các bình đẳng biển số tương tự như "đặt" như vậy:

<%= "Hello %> 

...cũng giống như:

<% puts "Hello" %> 

Ví dụ # 2:

<% if !user_signed_in? %> 
    <%= "This text shows up on the page" %> 
<% end %> 

#returns "This text shows up on the page" if the user is signed in 
+0

Tôi đang tìm kiếm <%- -%>. Bạn có biết cơ hội nào không? – serengeti12

-1

Xem này:

<%= You need to do this %> 
<% You shouldn't do this %> 
4

Nó chỉ là như thế này

<% execute this code and display nothing %> 

<%= execute this code and display the result in the view %> 
Các vấn đề liên quan