Mon exemple sous formesans connaître les validations champs
<% form_for @ad do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :ad_type_id %><br />
<%= f.collection_select(:ad_type_id, AdType.all, :id, :name) %>
</p>
<p>
<% @ad.ad_properties.each do |property| %>
<%= property.name %>:
<% f.fields_for :ad_values do |value_field| %>
<%= value_field.text_field :ad_id, :value => @ad.id %>
<%= value_field.text_field :ad_property_id, :value => property.id %>
<%= value_field.text_field :value %>
<% end %><br /><br />
<% end %>
</p>
<p>
<%= f.label :description %><br />
<%= f.text_area :description %>
</p>
<p><%= f.submit %></p>
<% end %>
Explication:
Ad possède de nombreuses propriétés. Je peux ajouter de nouvelles propriétés à tout moment (c'est un modèle normal).
Disons que l'annonce est du type «hôtel». Ensuite, j'ajouterais des propriétés comme 'stars' et 'breakfast_included'
Ensuite, je stocke chacune des valeurs de ces propriétés dans un modèle séparé.
Et tout cela fonctionne très bien avec ma forme ci-dessus.
Mon problème:
Ces champs ne sont pas validés car je ne peux pas savoir quels sont leurs noms.
J'ai besoin d'ajouter des validations de façon dynamique.
Ma pensée:
#Before the normal validations kick in
def add_validations
self.properties.each do |property|
property.add_validation :whatever #somehow :)
end
end
Comment pourrais-je faire cela?
C'est la chose. Je n'ai pas de modèle pour chaque AdType. Je veux être en mesure d'ajouter de nouveaux types à cette table, puis ajouter simplement de nouvelles propriétés d'AdProperties pour ce nouveau type. Construire une structure par l'administration essentiellement :) – Frexuz