私はActionViewのために存在する非常に貧弱なドキュメンテーション、特にビューファイルから呼び出されたときにだけ存在するselect_tag
というメソッドを調べました。ActionViewの "select_tag"が直接呼び出されたときに、 "options"引数でHTMLをエスケープするのはなぜですか?
select_tag name, option_tags, options
documentationはoptions
についてほとんど全くname
については何も、言わない、とだけ他から取得する必要があり、不透明な値として扱う例を挙げて説明しoption_tags
:たぶん、このように呼ばれています機能。
いつものように、Railsについて何かを学ぶ唯一の方法は、それをリバースエンジニアリングすることです。
だから私は、Rubyはあなたが最初のクラスとオブジェクトを作成しない限り、モジュールで定義されているメソッドを呼び出すことはできませんので注意が必要ですRailsのコンソールから直接それを実行してみました:
class H
include ActionView::Helpers::FormOptionsHelper
include ActionView::Helpers::FormTagHelper
end
H.new.options_for_select ["foo","bar"]
options_for_select
の上記の使用は、他の誰かが書いた実際のコードに由来します。戻り値は文字列です:
"<option value=\"foo\">foo</option>\n<option value=\"bar\">bar</option>"
だから、明らかに、あなたは私のような話をしたくないoption_for_select
(または合併症を紹介し、他の多くの関連機能の1からの戻り値を渡すことになっていますActiveRecordオブジェクトからHTMLタグを生成する)select_tag
のoption_tag
パラメータです。あなたのクリップボードにその文字列をコピーし、関数呼び出しに直接貼り付けた場合を除き、それはあなたが期待するもの行いません。
H.new.select_tag :my_name, "<option value=\"foo\">foo</option>\n<option value=\"bar\">bar</option>"
戻り値:
"<select name=\"my_name\" id=\"my_name\"><option value="foo">foo</option>\n<option value="bar">bar</option></select>"
は、少なくとも、これは明らかにname
のパラメータは次のとおりです。あなたはそれがコンソールに印刷させることなく、直接select_tag
への戻り値を渡す場合
でも奇妙、テキストがエスケープされていません。
H.new.select_tag :name, H.new.options_for_select(["foo","bar"])
戻り値:
"<select name=\"name\" id=\"name\"><option value=\"foo\">foo</option>\n<option value=\"bar\">bar</option></select>"
WTFされますここにいる?