Dies ist eine rein Ruby-Syntax-Frage, obwohl es im Kontext von Rails ist.String-Verkettung und Yield-Block basierend auf If-Modifikator
Ich habe eine Methode, die einen Block übernimmt und wandelt es in seiner Definition proc Objekt:
def wrapper(form, attr, options = {}, &block)
if block_given?
yield(block) +
end
form.label(form_label, class: "control-label")
end
der Block ein Stück HTML als String ist, und ich möchte es mit form.label verketten die selbst wird als eine Zeichenfolge von HTML zurückgegeben. Ich möchte jedoch nur die beiden verketten, wenn der Block gegeben ist.
Die oben erzeugt Syntaxfehler:
SyntaxError: (irb):14: syntax error, unexpected keyword_end
Mit dem if-Modifikator funktioniert auch nicht:
def wrapper(form, attr, options = {}, &block)
yield(block) + if block_given?
form.label(form_label, class: "control-label")
end
Ich könnte auch später so etwas wie dies tun müssen (in diesem Fall I 3 verketten Zeichenfolgen bedingt):
Was ist der beste Ansatz zum Verketten eines Blocks wit h eine Zeichenfolge, wenn der Block optional sein kann?
Eine Lösung, die ich dachte, nachdem die Frage zu stellen ist vielleicht dies:
def wrapper(form, attr, options = {}, &block)
if block_given?
content = capture(&block)
else
content = ""
end
form.label(form.object.errors[attr]) + content + form.label(form_label, class: "control-label")
end
Warum haben Sie die Argumente 'attr' und' options', wenn man bedenkt, dass sie nicht verwendet werden? Ist 'form_label' eine Methode? –