我有一个过滤器类,其中包括 ActiveModel 并由两个日期组成:
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
?