Ruby Forum Rails Germany > HTML aus einem Helper erzeugen

Posted by Holger Hänisch (ortwin)
on 01.05.2008 12:01
Hallo,

ich möchte mit einem Helper eine Schleife durchlaufen, die HTML Code bei
jeder Schleifenitteration erzeugt. Ich weiss nicht wie!

render :text  => 'monat + <td> + i + </td>'

funktioniert irgendwie nicht. Wie geht man vor?

Holger
Posted by Jan Prill (Guest)
on 01.05.2008 12:27
(Received via mailing list)
Hi Holger,
die Frage musst Du nochmal etwas präziser stellen.

Du hast diverse Möglichkeiten, zB direkt im view

<table>
  <tr>
    <%- (1..12).each do |i| -%>
      <td>Monat <%= i.to_s %></td>
    <%- end -%>
  </tr>
</table>

oder Du setzt das HTML in einem Helper zusammen, um es dann im view zB 
über

<%= month_columns %>

auszugeben, wobei def month_columns im helper die td-fragmente liefert,

oder, oder, oder...

Gruß

Jan

Am 1. Mai 2008 12:01 schrieb Holger Hänisch <lists@ruby-forum.com>:

> --
> Posted via http://www.ruby-forum.com/.
>
> _______________________________________________
> rubyonrails-ug mailing list
> rubyonrails-ug@headflash.com
> http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug
>
>


--
Jan Prill
Rechtsanwalt

Grünebergstraße 38
22763 Hamburg
Tel +49 (0)40 41265809 Fax +49 (0)40 380178-73022
Mobil +49 (0)171 3516667
http://www.inviado.de
Posted by Holger Hänisch (ortwin)
on 01.05.2008 12:59
Hallo Jan,

also etwas präziser:

Ich habe im View bis jetzt folgendes (nur zum Testen)

<table>
  <tr>
    <%= monat(Time.now) %>
  </tr>
</table>


im Helper folgendes:

def monat(datum)
   monat = datum.month
   tag = letzter_tag(datum)
   for i in 1..tag.day
     render :text  => '<td> + i + </td>'
   end
 end

 def letzter_tag(datum)
   datum = datum + 1.month
   tage = datum.day
   datum = datum - tage.days - 1
 end

Was hier passiert ist: Das Datum wird untersucht. Der letzte Tag im 
Monat wird ermittelt. Eine Tabelle soll aus den Tagen erzeugt werden.

Das ganze ist nur der Anfang und wird natürlich noch erweitert. Aber ich 
habe schon allein das Prinzip noch nicht verstanden.

Holger
Posted by Jan Prill (Guest)
on 01.05.2008 13:11
(Received via mailing list)
Hi Holger,
ok, also nur das Prinzip:

def monat(datum)
  html = ''
  monat = datum.month
  tag = letzter_tag(datum)
  for i in 1..tag.day
    html += "<td>#{i.to_s}</td>"
  end
  html # = return html falls Du von Java oä kommst...
 end

Besten Gruß

Jan

Am 1. Mai 2008 12:59 schrieb Holger Hänisch <lists@ruby-forum.com>:
Posted by Rene Paulokat (Guest)
on 01.05.2008 13:14
(Received via mailing list)
On Thu, May 01, 2008 at 12:59:19PM +0200, Holger Hänisch wrote:
(...)
> im Helper folgendes:
> 
> def monat(datum)
>    monat = datum.month
>    tag = letzter_tag(datum)
>    for i in 1..tag.day
>      render :text  => '<td> + i + </td>'
>    end
>  end

render just once! ;)
evtl. so:

def monat(datum)
  monat = datum.month
  tag = letzter_tag(datum)
  string = ""
  for i in 1..tag.day
    string <<  "<td>#{i}</td>"
  end
  string
end


gruesse
rene
Posted by Rene Paulokat (Guest)
on 01.05.2008 13:28
(Received via mailing list)
On Thu, May 01, 2008 at 01:11:15PM +0200, Jan Prill wrote:
>   html # = return html falls Du von Java oä kommst...
>  end

okay jan war schneller -
evtl. noch ein hinweis die schreibweise #{x} rendert automatisch x.to_s,
kannste also .to_s sparen. (5 chars!)

:)
rene
Posted by Holger Hänisch (ortwin)
on 01.05.2008 22:51
Rene Paulokat wrote:
> On Thu, May 01, 2008 at 01:11:15PM +0200, Jan Prill wrote:
>>   html # = return html falls Du von Java o� kommst...
>>  end
> 
> okay jan war schneller -
> evtl. noch ein hinweis die schreibweise #{x} rendert automatisch x.to_s,
> kannste also .to_s sparen. (5 chars!)
> 
> :)
> rene

Vielen Dank fuer die Hinweise. Ich habe es mit eurer Hilfe dann 
hinbekommen!!

Holger