Добавление проверок без знания полей - PullRequest
1 голос
/ 07 июня 2010

Мой пример формы

<% 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 %>

Пояснение:
Объявление имеет много свойств. Я могу добавить новые свойства в любое время (это нормальная модель).
Допустим, объявление относится к типу "отель". Тогда я бы добавил свойства типа 'stars' и 'morning_included'
Затем я сохраняю значения каждого из этих свойств в отдельной модели.
И все это прекрасно работает с моей формой выше.

Моя проблема:
Эти поля не проверены, потому что я не могу знать, как их имена.
Мне нужно как-то динамически добавлять проверки.

Моя мысль:

#Before the normal validations kick in
def add_validations
  self.properties.each do |property|
    property.add_validation :whatever #somehow :)
  end
end

Как я мог это сделать?

Ответы [ 2 ]

0 голосов
/ 07 июня 2010

Отказ от ответственности: я никогда не делал этого раньше, поэтому я не уверен на 100%, что это будет работать.

Но пока вы можете получить тип объекта, с которым работаете, вы можетеиспользуйте метод Rails constantize , чтобы получить модель, на которую он ссылается (я предполагаю, что если реклама может быть типа Hotel, то у вас есть модель Hotel).В этот момент у вас, вероятно, должны быть соответствующие проверки для вашей модели отеля.

0 голосов
/ 07 июня 2010

Вы пробовали с полиморфными ассоциациями? Это может быть более чистый подход.

http://railscasts.com/episodes/154-polymorphic-association

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...