Fat ActiveRecord Models をリファクタリングするための 7 つのパターン #3で説明されているように、フォーム オブジェクトを使用していますが、現在、日付の保存に問題があります。
これが私がやったことです:
class MyModelForm
# ...
def initialize(my_model: MyModel.new, params: {})
@my_model, @params = my_model, params
@my_model.date_field_on = Date.from_params @params, "date_field_on" if @params.present?
end
end
Date.from_params
次のように実装されている場所:
class Date
def self.from_params(params, field_name)
begin
year = params["#{ field_name }(1i)"]
month = params["#{ field_name }(2i)"]
day = params["#{ field_name }(3i)"]
Date.civil year.to_i, month.to_i, day.to_i if year && month && day
rescue ArgumentError => e
# catch that because I don't want getting error when date cannot be parsed (invalid)
end
end
end
スキップされ、日付が保存されない@my_model.assign_attributes @params.slice(*ACCEPTED_ATTRIBUTES)
ため、そのまま使用することはできません。params["date_field_on(<n>i)"]
フォーム オブジェクトを使用して日付フィールドを処理するためのより良い方法はありますか?