やりたいこと
オブジェクトのデータの型を見て、
「integer」ならスピンボタンがついたテキストボックスを
「datetime」ならカレンダーピッカーを
「string」ならただのテキストボックスを
自動で表示できるような仕組みを作ろうとしています。
やったこと・問題点
このサイトなどを見て、「datetime」や「integer」という型が存在することを確認し、
以下のような部分テンプレートを作成しました。
この部分テンプレートを各viewから呼び出して使用します。(「model」にはビューから渡ってきたデータが入ります)
ruby
1(pertial.html.erb) 2<% if model.class === "Integer" %> 3 スピンボタンがついたテキストボックスを表示 4<% elsif model.class === "Datetime" %> 5 カレンダーピッカーを表示 6<% elsif model.class === "String" %> 7 ただのテキストボックスを表示 8<% end %>
そして、以下のコマンドを実行し、画面を作成し、上記部分テンプレートを呼び出しました。
rails g scaffold todo name:string date:datetime number:integer price:decimal
ruby
1<%= render 'pertial', model: @todo.date %>
ところが、実行してもカレンダーピッカーが表示されませんでした。
同じように、スピンボタンがついたテキストボックスも表示されませんでしたが、
ただのテキストボックスは表示されました。
model.classの中身を見てみると、以下のように型が変化していました。
datetime ⇒ ActiveSupport::TimeWithZone
integer ⇒ Fixnum
string ⇒ 変化無し
そこで、部分テンプレートを下記のように変更しました。
ruby
1(pertial.html.erb) 2<% if model.class === "Fixnum" %> 3 スピンボタンがついたテキストボックスを表示 4<% elsif model.class === "ActiveSupport::TimeWithZone" %> 5 カレンダーピッカーを表示 6<% elsif model.class === "String" %> 7 ただのテキストボックスを表示 8<% end %>
しかし結果は変わらず、ただのテキストボックスしか表示できませんでした。
(1)なぜ型が変わるのか
(2)なぜ型が合ってるはずなのに、分岐を通り過ぎてしまうのか
(3)なぜStringだけうまくいくのか
(4)どうすればやりたいことが実現できるのか
お分かりの方、ご教授いただけませんでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/05 04:26
2017/04/05 05:45
2017/04/05 06:25