質問: "String" %> ただのテキストボックスを表示 <% end %> ``` しかし結果は変わらず、ただのテキストボックスしか表示できませんでした。 (1)なぜ型が変わるのか (2)なぜ型が合ってるはずなのに、分岐を通り過ぎてしまうのか (3)なぜStringだけうまくいくのか (4)どうすればやりたいことが実現できるのか お分かりの方、ご教授いただけませんでしょうか。
回答: 色々と間違っているので何から突っ込んだらいいか... 多分javascriptあたりからいらしたんでしょうrubyは別世界ですからね。 とりあえず質問に答える前に以下の前提を考慮してください。 1「datetime」や「integer」という型はDataBaseにおける型です。 参考サイトはあくまでDataBaseを作る際のデータの形式(型)を指定してるだけで Rubyとはあまり関係ありません ※ちなみに型というのは数学的に言うと演算について閉じている(同じ型同士は足したり引いたりできる)と言う意味です。 Rubyに型といえば数字と文字あとはArrayとHashぐらいでしょうか? ruby においてはミミズだってオケラだって、Integerだって(nilさえも) みんなみんなClassです。methodが使えます。Classと型とは異なることをご理解ください。 2 部分テンプレートは通常このような用途には使いません こういった場合Helper Methodを構築します。 3 rubyは===をあまり使いません、型を意識しないのが売りなので通常 ==で事足ります。 ex 1=="1" => true 4 ruby で Class はイニシャルが大文字で表されます。 'String'とかで表されるわけではありません。 なので、"文字列".class==String => ture となります。 5 かえって混乱を招きますが===だとこういう面白いことが起こります。 "文字列"===String => false String==="文字列" => true これでnae_stage様の1−3の質問に答えられたと思います。 4に関しましてはcase when を使って(実はこの評価で===が使われます。) helpers/application_helper.rbに ``` def hoge_helper(model) case model when Fixnum スピンボタンがついたテキストボックスを表示 when ActiveSupport::TimeWithZone カレンダーピッカーを表示 when String ただのテキストボックスを表示 end end ``` と追記してください そしてviewで ``` <%= hoge_helper(model) %> ``` と使うのがいいと思います。 私はこれをいつ使うのか見当がつきませんが...。 わからないことがあったらコメントください