2012-11-04 5 views
4

내 컨트롤러에 정의 된 간단한 배열을 각 요소에 대한 새로운 줄이있는 내 뷰에 인쇄하려고합니다. 그러나 그것이하는 일은 전체 배열을 한 줄에 인쇄하는 것입니다. 결과 여기ERB를 사용하는 배열 요소 인쇄

<%= @todo_array.each do |t| %> 
<%= puts t %><\br> 
<% end %> 

것 :

<\br> <\br> <\br> <\br> ["Buy Milk", "Buy Soap", "Pay bill", "Draw Money"] 

답변

12

ERB, 당신이보기에 사용하고있는 템플릿 엔진이어야한다, 템플릿 내에서 루비 코드를 삽입하는 몇 가지 방법이있다.

<%= %> 블록 안에 코드를 삽입하면 erb는 코드를 내부에서 평가하고 HTML에서 마지막 명령문의 값을 인쇄합니다. ruby에서 .each이 반복 된 컬렉션을 반환하기 때문에 루프는 <%= %>을 사용하여 전체 배열의 문자열 표현을 인쇄하려고 시도합니다.

<% %> 블록 안에 코드를 넣으면 erb는 아무 것도 인쇄하지 않고 코드를 평가합니다. 뷰에서 조건문, 루프 또는 수정 변수를 수행 할 수 있습니다.

puts t에서 puts을 제거 할 수도 있습니다. Erb는 <%= %> 안에있는 마지막 값을 표시 할 문자열로 변환하려고 시도합니다.

2

이 각 문에서 등호를 제거

<% @todo_array.each do |t| %> 
    <%= t %><\br> 
<% end %> 
여기
class TodosController < ApplicationController 
    def index 
    @todo_array = [ "Buy Milk", "Buy Soap", "Pay bill", "Draw Money" ] 
    end 
end 

내보기입니다 : 여기

내 컨트롤러의보기와
5

두 가지 문제 :

  1. 사용하는 "<퍼센트 ="당신이 "<퍼센트"을 사용 할 위치.
  2. 필요없는 '풋'

이 당신의 결과를 개선해야 내가 더 나은 대신 BR 태그를 사용하는 (당신의 할 일 목록을 구성하는 일부 HTML 구조를 사용하여 고려할

<% @todo_array.each do |t| %> 
    <%= t %><\br> 
<% end %> 

아마도 다음과 같은 순서가없는 목록 일 것이다.

<ul> 
    <% @todo_array.each do |t| %> 
    <li><%= t %></li> 
    <% end %> 
</ul> 
5

왜 '='기호를 첫 줄에 넣었습니까? < % %>는 레일 아래에 문자열이 루비 코드라는 것을 알려주는데 사용됩니다. where as < % = %> 이것은이 태그의 문자열이 루비에 있음을 레일스에 알려서 평가하고 html 파일로 결과를 인쇄합니다. 따라서

당신이

<%=

을 작성하는 코드를 검사하려고 todo_array.each @ 할 | t | %> 이 줄은 @todo_array를 반복 할 때만 사용되므로 그 줄을 인쇄 할 필요가 없습니다. 그래서 최종 코드는

<% @todo_array.each do |t| %> 
<%= puts t %> 
<% end %> 
5

그냥 시도 : 대신

<%= @todo_array.each do |t| %> 
    <%= puts t %><\br> 
<% end %> 

<%= @todo_array.join('<br />').html_safe %>