2010-06-07 63 views
1

我的例子形式添加驗證不知道該領域

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

說明:
廣告具有許多特性。我可以隨時添加新的屬性(這是一個普通的模型)。
可以說廣告是「酒店」類型的。然後我會添加屬性,如'星星'和'breakfast_included'
然後我將這些屬性的每個值存儲在一個單獨的模型中。
而這一切都可以正常使用我的表格。

我的問題:
這些字段沒有驗證,因爲我不知道他們的名字是什麼。
我需要以某種方式動態添加驗證。

我的想法:

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

我怎麼能這樣做?

回答

0

免責聲明:我從來沒有這樣做過,所以我不是100%肯定它會工作。

但是,只要您可以獲得您正在使用的對象的類型,就可以使用Rails constantize方法獲取它引用的模型(我假設如果廣告可以是酒店類型,那麼您有一個酒店模型)。此時,您應該在您的酒店模型上進行適當的驗證。

+0

就是這樣。我沒有針對每種AdType的模型。我希望能夠將新類型添加到該表中,然後爲該新類型添加新的AdProperties。 通過管理建立結構基本上:) – Frexuz 2010-06-09 15:54:18