ActiveModel を含み、2 つの日付で構成されるフィルター クラスがあります。
class MealFilter
include ActiveModel::Model
attribute :day_from, Date
attribute :day_to, Date
end
そのモデルは、次のような形式にレンダリングされます。
<%= form_for(@filter) do |f| %>
<div class="form-group form-group--date">
<%= f.label :day_from %>
<%= f.date_select :day_from %>
</div>
<div class="form-group form-group--date">
<%= f.label :day_to %>
<%= f.date_select :day_to %>
</div>
<% end %>
問題は、フォームが送信されると、このパラメーターがコントローラーに送信されることです。
{"utf8"=>"✓", "meal_filter"=>{"day_from(1i)"=>"2016", "day_from(2i)"=>"1", "day_from(3i)"=>"29", "day_to(1i)"=>"2016", "day_to(2i)"=>"1", "day_to(3i)"=>"30"}, "commit"=>"Filter"}
コントローラーのパラメーターを介して値を抽出します。
def meal_filter_params
if params.has_key? :meal_filter
params.require(:meal_filter).permit(:day_from, :day_to)
end
end
params[:meal_filter]
をMealFilter
クラスに割り当てると@filter = MealFilter.new(meal_filter_params)
、日付フィールドが正しく更新されません。1i 、2i、3iの部分が日付に正しく割り当てられていないようです。
ただし、ActiveRecord
クラスを使用する場合、これは正常に機能します。
私はいくつかのインクルードを見逃していますか? ではない場合、この魔法のマッピングが実装されている場所を知っている人はいActiveModel::Model
ますか?