Ruby
初心者
RubyOnRails
Rails5

[Rails]フォームで入力した値を計算して別の値をデータベースに入れる

More than 1 year has passed since last update.

やりたいこと

  • 身長体重カラムを持ったモデルがあるとする
  • フォームで身長体重を送信すると同時にBMI,身長を2倍したものをデータベースに格納

要は身長体重を入力させるだけでその他の情報もデータベースに格納したいとき

私の回答

persons/new.html.erb
...
<%= form_for(@person) do |f| =%>
  <%= f.text_field :weight =%>
  <%= f.text_field :height =%>
<% end %>
...
person.rb
class Person < Application
  def bmi
    weight / height ** 2
  end

  def height_2
    height * 2
  end

  def set_extra_information
  {:bmi => bmi, :height_2 => height_2 }
  end
end
persons_controller.rb
def new
  @person = Person.new
end

def create
  @person = Person.new(person_information)
  @person.save
end

private

def person_params
  params.require(:person).permit(:height, :weight)
end

def person_information
  person_params.merge(@person.set_extra_information)
end

入力されたフォームをperson_paramsで受け取ってそれをそのままインスタンス生成するのではなくてperson_informationというメソッドでhashとしてマージすることでデータベースにBMI,身長を2倍したものを格納できる

正しいのかわからないにゃあ