Синатра: хелпер и рубиновый диапазон - PullRequest
0 голосов
/ 02 ноября 2011

Я пытался использовать диапазон для перебора в Синатре.

когда я пытаюсь что-то вроде

helpers do
  def iteration
    (1..6).each do |x|
       x
     end
  end
end

и вызовите помощника из моего приложения, оно напечатает 1..6

если я перейду на

 (1..6).to_a do #...

это печать 123456

это нормально? или мне нужно что-то большее в моем приложении, чтобы иметь возможность использовать диапазон?

Ответы [ 3 ]

2 голосов
/ 03 ноября 2011
helpers do
  def iteration
    (1..6).each do |x|
       x
       #it dosen't mean output the 123456, this just let the method return a value 1..6
       #in other words, it still iteras the array in backgroud, 
       #but not outputs in terminal, you can't see it.

       print x
       #it prints 123456, really
     end
  end
end

Редактировать

В Синатре вы можете сделать это следующим образом

get '/t' do
    #it will output the 123456
    body = ""
    (1..6).each do |x|
        body << x.to_s
    end
    body
end
2 голосов
/ 02 ноября 2011

Вам все равно нужно позвонить each:

(1..6).to_a.each do ...

В вашем вспомогательном методе вы на самом деле ничего не делаете . Метод iteration просто возвратит результат последнего оператора в методе; each возвращает переданный ему аргумент, так что именно это и отображается.

0 голосов
/ 03 ноября 2011

Я пытался найти способ вывода html-кода из помощника с помощью Sinatra (мог использовать markaby, но мне нужно подождать, пока ИТ-отдел решит, установить они его или нет). поэтому я хотел пройти через диапазон для вывода разметки. но не мог заставить это работать в Синатре. хорошо в IRB хотя.

В конце концов это то, что я сделал

def tag_iterator
  (1..6).map  do |x|
    "<p>#{x}</p>"
  end
end

В шаблоне:

__END__

@@index  
%h1= @title
.test
   %div= "#{tag_iterator}"

А теперь он проходит через диапазон в обычном режиме. Полагаю, Руби для меня слишком волшебна, я могу часами гадать, как все устроено: ^ P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...