高さはインチ単位でデータベースに保存されます。
ただし、フィートとインチには、次の形式で独自の入力が必要です。
Height: [_______] feet [_______] inches
そこで、仮想属性を使用して、それを機能させました。これが私のモデルの簡略版です:
class Client < ActiveRecord::Base
attr_accessible :name, :height_feet, :height_inches
before_save :combine_height
def height_feet
height.floor/12 if height
end
def height_feet=(feet)
@feet = feet
end
def height_inches
if height && height%12 != 0
height%12
end
end
def height_inches=(inches) #on save?
@inches = inches
end
def combine_height
self.height = @feet.to_d*12 + @inches.to_d #if @feet.present?
end
end
そして、_form
simple_formを使用した部分:
<%= simple_form_for(@client) do |f| %>
<ul>
<%= f.error_notification %>
<%= f.input :name %>
<%= f.input :weight %>
<li>
<%= f.input :height_feet, :label => 'Height', :wrapper => false %>
<span>feet</span>
<%= f.input :height_inches, :label => false, :wrapper => false %>
<span>inches</span>
</li>
<%= f.error :base %>
</ul>
<%= f.button :submit %>
<% end %>
これは機能します。しかし、それは理想的ではありません。
これを乾かしてカスタム入力コンポーネントを作成し、フォームに高さを追加できるようにします。<%= f.input :height, as: :feet_and_inch %>
したがって、。などの同じパターンに従う他の入力を追加し<%= f.input :wingspan, as: :feet_and_inch %>
ます。
カスタムコンポーネントを試しましたが、2つの入力を表示できません。また、「変換」ロジックをフィートとインチからインチに(そして同様にインチからインチに戻す)のに最適な場所がわかりません。フィートとインチ)。