そのため、ActionView に存在する非常に貧弱なドキュメント、特にselect_tag
ビュー ファイルから呼び出されたときに呼び出されるメソッドについて調べてきました。おそらく、次のように呼び出されます。
select_tag name, option_tags, options
ドキュメンテーションは、についてはまったく何も述べておらず、 についてはname
ほとんど何も述べておらず、 を他の関数から取得する必要がある不透明な値として扱う例を通してのみoptions
説明しています。option_tags
いつものように、Rails について何かを学ぶ唯一の方法は、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
(または ActiveRecord オブジェクトから HTML タグを生成するなど、私が話したくはない複雑さを導入する他の多くの関連関数の 1 つ) からの戻り値を のoption_tag
パラメーターとして渡すことになっているようですselect_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が行われていますか?