i have filter-class includes activemodel , consists of 2 dates:
class mealfilter include activemodel::model attribute :day_from, date attribute :day_to, date end that model rendered form following:
<%= form_for(@filter) |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 %> the problem now, when form gets submitted, sends parameters controller:
{"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"} i extract values via controller parameters:
def meal_filter_params if params.has_key? :meal_filter params.require(:meal_filter).permit(:day_from, :day_to) end end if assign params[:meal_filter] mealfilter class @filter = mealfilter.new(meal_filter_params), date fields not updated correctly. seams 1i, 2i, 3i parts not correctly assigned dates.
however, works fine if used activerecord class.
do miss include? know, magic mapping implemented if not in activemodel::model?
ok, found solution. needed multiparameterassignment implemented in activerecord not in activemodel.
as far can see, there open pull request (https://github.com/rails/rails/pull/8189) should resolve issue.
but in meantime, clever guy wrote module can included model: https://gist.github.com/mhuggins/6c3d343fd800cf88f28e
all need include concern , define class_for_attribute method returns class attribute should mapped - in case date.
Comments
Post a Comment