J'ai un filtre de classe qui comprend ActiveModel et se compose de deux dates:Rails: Cartographie une date à partir des paramètres de formulaire dans ActiveModel objet
class MealFilter
include ActiveModel::Model
attribute :day_from, Date
attribute :day_to, Date
end
Ce modèle est rendu en une forme comme suit:
<%= 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 %>
le problème est maintenant, lorsque le formulaire est soumis, il envoie ces paramètres au contrôleur:
{"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 Extrait les valeurs via les paramètres du contrôleur:
def meal_filter_params
if params.has_key? :meal_filter
params.require(:meal_filter).permit(:day_from, :day_to)
end
end
si je cède maintenant la params[:meal_filter]
à ma MealFilter
classe avec @filter = MealFilter.new(meal_filter_params)
, mes champs de date ne sont pas mis à jour correctement. Il semble que les pièces 1i, 2i, 3i ne soient pas correctement affectées aux dates.
Toutefois, cela fonctionne très bien si vous utilisez une classe ActiveRecord
.
Est-ce que je ne comprends pas? Est-ce que quelqu'un sait, où cette cartographie magique est implémentée sinon dans ActiveModel::Model
?
Qu'est-ce que 'meal_filter_params'? Obtenez-vous un avertissement de paramètres forts dans votre journal Rails peut-être? – rossta
C'est une méthode sur le contrôleur qui retourne uniquement les parametres meal_filter autorisés ... J'ai mis à jour la description pour clarifier cela. Un avertissement de paramètre n'existe pas dans ma console. – tomraithel
Et que voulez-vous dire par "pas mis à jour correctement"? Comment vous vérifiez que c'est mis à jour? – rossta