Link_to: wie elegant um weiteres Markup legen?

link_to(name, …) ist schön, wenn “name” wirklich nur ein einfacher
String oder image_tag ist. Wenn aber mehr in das hinein
soll, dann wird es unübersichtlich und läuft auf Konkatenation von
Strings hinaus. Das muss eleganter gehen, ich habe nur keine gute Idee.

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/

wie sieht es mit nem helper aus?

def my_name(var1,var2)
string = “bla”+
string += “blub #{var1}…”+
string += “irgendwas anderes - #{var2}”
end

link_to my_name(“blub”,“ende”), blub_path
=> bla blub blub…irgendwas anderes - ende

oder hab ich was falsch verstanden?

gruß manuel

Hallo,

On Nov 19, 2007 11:51 PM, Michael S. [email protected] wrote:

link_to(name, …) ist schön, wenn “name” wirklich nur ein einfacher
String oder image_tag ist. Wenn aber mehr in das hinein
soll, dann wird es unübersichtlich und läuft auf Konkatenation von
Strings hinaus. Das muss eleganter gehen, ich habe nur keine gute Idee.

Probiere es mit content_tag

link_to(content_tag(:b, “Test-Link”), dein_path)

http://api.rubyonrails.com/classes/ActionView/Helpers/TagHelper.html#M000604

Andreas

hier geht es doch mehr um so was wie nen bild, bzw. eben etwas
komplizierteres, als einfach nur einen string…
so was wie firstname middle_initial. lastname. im railscast wird gezeigt
wie es geht… #10 Refactoring User Name Part 1 - RailsCasts

wenn es nur um design oder so was geht, reicht natürlich auch :class =>
aber für alles andere würd ich helper machen…

gruß manuel

Am 19.11.2007 um 23:51 schrieb Michael S.:

link_to(name, …) ist schön, wenn “name” wirklich nur ein einfacher
String oder image_tag ist. Wenn aber mehr in das hinein
soll, dann wird es unübersichtlich und läuft auf Konkatenation von
Strings hinaus. Das muss eleganter gehen, ich habe nur keine gute
Idee.

Warum drinnen und nicht draußen?
Oder (fast immer) noch besser, eine class vergeben?

ciao, tom


Thomas R. “TomK32” Koll <> http://tomk32.de <> http://ananasblau.de
just a geek trying to change the world
Skype: TomK32

On Mon, 19 Nov 2007 23:51:06 +0100
Michael S. [email protected] wrote:

link_to(name, …) ist schön, wenn “name” wirklich nur ein einfacher
String oder image_tag ist. Wenn aber mehr in das hinein
soll, dann wird es unübersichtlich und läuft auf Konkatenation von
Strings hinaus. Das muss eleganter gehen, ich habe nur keine gute Idee.

bastel dir doch einen helper, der nur ein ausgibt, a la
<% link_to_tag(…) do %>whatever markup you want here<% end %>

def link_to_tag( options = {}, html_options = nil,
*parameters_for_method_reference, &block )
link_text = capture(&block)
concat(link_to(link_text, options, html_options,
parameters_for_method_reference), block.binding)
end

(sorry sollten eigentlich ncur vier Zeilen sein)
kann man vielleicht noch huebscher benennen…

Morus

On Tuesday 20 November 2007, Andreas R. wrote:

Hallo,

On Nov 19, 2007 11:51 PM, Michael S. [email protected]
wrote:

link_to(name, …) ist schön, wenn “name” wirklich nur ein
einfacher String oder image_tag ist. Wenn aber mehr in das
hinein soll, dann wird es unübersichtlich und läuft auf
Konkatenation von Strings hinaus. Das muss eleganter gehen, ich
habe nur keine gute Idee.

Probiere es mit content_tag

link_to(content_tag(:b, “Test-Link”), dein_path)

Klar, das geht – gefällt mir aber nicht. Wenn da nämlich mehrere “Tags”
(also Elemente) hinein sollen, dann müsste ich content_tag(…) +
content_tag(…) schreiben, was ich unschön finde. Ja, ich könnte
dafür einen Helper schreiben, aber auch das will ich nicht.

Grundsätzlich möchte ich in RHTML die Struktur der vorher gehenden und
erzeugten HTML-Dateien nachvollziehen können, sofern nicht gerade sehr
gute Gründe für Abstraktion sprechen. Mit der vorher gehenden Datei
beziehe ich mich auf den Fall, dass jemand anders das Layout in HTML
vorgibt. Um daraus RHTML zu machen möchte ich dann eigentlich nur
ergänzen und einzelne Elemente austauschen, aber nicht alles
umkrempeln.

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/

Hallo,

On Nov 20, 2007 8:26 AM, Michael S. [email protected] wrote:

link_to(content_tag(:b, “Test-Link”), dein_path)

Klar, das geht – gefällt mir aber nicht. Wenn da nämlich mehrere “Tags”
(also Elemente) hinein sollen, dann müsste ich content_tag(…) +
content_tag(…) schreiben, was ich unschön finde. Ja, ich könnte dafür
einen Helper schreiben, aber auch das will ich nicht.

ich habe mittlerweile aufgegeben nachzufragen, warum jemand etwas
unbedingt so machen will, wie er sich das vorstellt. Ausserdem frage
ich auch nicht mehr nach Code-Snipplets, die einem vielleicht den
Kontext zeigen könnten. Beide Informationen sind oftmals ganz
hilfreich um die Fragestellung zu verstehen und elegante, wenn auch
gänzlich abweichende, Lösungsvorschläge zu liefern.

Also wenn Du weder mit content_tag noch mit Helpern arbeiten willst,
dann weiss ich auch nicht mehr weiter.

Andreas

Es gibt noch content_for bzw capture, wenn es sich um wirklich viel
Content handelt der da reingezogen werden soll. Was ich mir aber bei nem
Link kaum vorstellen kann, daher => Helper! is auch am besten zum
wiederverwenden, wie ich finde.

On Tue, Nov 20, 2007 at 10:34:00AM +0100, Morus W. wrote:

<% link_to_tag(…) do %>whatever markup you want here<% end %>

def link_to_tag( options = {}, html_options = nil,
*parameters_for_method_reference, &block )
link_text = capture(&block)
concat(link_to(link_text, options, html_options,
parameters_for_method_reference), block.binding)
end

(sorry sollten eigentlich ncur vier Zeilen sein)
kann man vielleicht noch huebscher benennen…

oder einfach link_to derart überschreiben dass es selber entscheidet ob
ein vorhandenes capture mit nem Link zu umschließen ist, oder eben das
normale link_to aufruft…

Jens


Jens Krämer
http://www.jkraemer.net/ - Blog
http://www.omdb.org/ - The new free film database

Am 20.11.2007 um 08:26 schrieb Michael S.:

Probiere es mit content_tag

link_to(content_tag(:b, “Test-Link”), dein_path)

Klar, das geht – gefällt mir aber nicht. Wenn da nämlich mehrere
“Tags”
(also Elemente) hinein sollen, dann müsste ich content_tag(…) +
content_tag(…) schreiben, was ich unschön finde. Ja, ich könnte
dafür
einen Helper schreiben, aber auch das will ich nicht

Vielleicht hilft Dir das hier weiter: http://markaby.rubyforge.org/

Greetz
Torsten_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

hi,

Am 20.11.2007 um 11:05 schrieb Andreas R.:

Also wenn Du weder mit content_tag noch mit Helpern arbeiten willst,
dann weiss ich auch nicht mehr weiter.

mach doch die geschichte mit dem block helper, die morus und jens
vorschlagen. dabei umschliesst dein selbstgeschriebener helper
“link_to_with_block” :slight_smile: den html-schnipsel, den du als link verwenden
möchtest. siehe z.b. das pdf “v is for vexing (patterns to dry up
your views)” von marcel molina. im template sähe das so aus:

<% link_to_with_block(url_for(somewhere)) do %>



<% end %>

wenn du dein tag aus link_to um block-level elemente (div,p,…)
legst bekommst du natürlich ungültiges html (falls dich das
interessiert ;-)). da wäre ein onclick= auf dem äußersten element
besser, aber braucht natürlich JS.

viele
grüße,phillip_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

On Tuesday 20 November 2007, Phillip O. wrote:

dry up your views)" von marcel molina. im template sähe das so aus:

<% link_to_with_block(url_for(somewhere)) do %>



<% end %>

Das hatte ich schon von vornherein überlegt, aber gleich wieder
verworfen, weil es für link_to_function nicht funktionieren würde, da
dort der Block schon für den RJS-Code verwendet wird. Ansonsten wäre
das tatsächlich die schönste Lösung.

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/

Am Tue, 20 Nov 2007 23:17:34 +0100 schrieb Michael S.
[email protected]:

Das hatte ich schon von vornherein überlegt, aber gleich wieder
verworfen, weil es für link_to_function nicht funktionieren würde, da
dort der Block schon für den RJS-Code verwendet wird. Ansonsten wäre
das tatsächlich die schönste Lösung.

Richtige Antwort: Statt link_to_function eine JS-Behavior-Library
verwenden und doch die elegante link_to-Variante verwenden können :slight_smile:

Beste
GrüßeMoritz

On Tuesday 20 November 2007, Moritz H. wrote:

Am Tue, 20 Nov 2007 23:17:34 +0100 schrieb Michael S.
[email protected]:

Das hatte ich schon von vornherein überlegt, aber gleich wieder
verworfen, weil es für link_to_function nicht funktionieren würde,
da dort der Block schon für den RJS-Code verwendet wird. Ansonsten
wäre das tatsächlich die schönste Lösung.

Richtige Antwort: Statt link_to_function eine JS-Behavior-Library
verwenden und doch die elegante link_to-Variante verwenden können
:slight_smile:

:slight_smile: Einverstanden. Wenn ich kann, wie ich will, mache ich das.

Michael


Michael S.
mailto:[email protected]
http://www.schuerig.de/michael/