これはRailsの文脈であっても純粋にルビー構文の質問です。修飾子に基づいた文字列の連結と収穫ブロック
Iブロックを受け入れ、その定義にPROCオブジェクトに変換する方法があります
def wrapper(form, attr, options = {}, &block)
if block_given?
yield(block) +
end
form.label(form_label, class: "control-label")
end
ブロックは文字列としてHTMLの一部であり、Iはform.labelれるとそれを連結しますそれ自身はhtmlの文字列として返されます。しかし、ブロックが与えられれば、2つを連結したいだけです。
上記は、構文エラーを生成します。
修飾子はまた、動作しない場合を使用してSyntaxError: (irb):14: syntax error, unexpected keyword_end
:
def wrapper(form, attr, options = {}, &block)
yield(block) + if block_given?
form.label(form_label, class: "control-label")
end
私はまた後で、私は3を連結した場合にはこのような何かを(行う必要があります文字列を条件付きで連結する):
def wrapper(form, attr, options = {}, &block)
form.label(options[:errors], class: "control-label required") +
yield(block) + if block_given?
form.label(form_label, class: "control-label")
end
ブロックウィットhブロックがオプションの場合は文字列ですか?私は質問をした後に考え
一つの解決策は、多分これです:
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
なぜ、それらが使われていないと考えて、あなたは 'attr'と' options'の引数を持っていますか? 'form_label'はメソッドですか? –