我有一个带有继承的Widget模型(我使用的是Single-Table Inheritance,但它对于每个表的类同样有效).一些子类需要特定的字段.别人没有.
class Widget < ActiveRecord
ALL_WIDGET_TYPES = [FooWidget,BarWidget,BazWidget]
end
class FooWidget < Widget
validates_presence_of :color
end
class BarWidget < Widget
# no color field
end
class BazWidget < Widget
validates_presence_of :color
end
我正在构建“新窗口小部件”表单(app / views / widgets / new.html.erb),并希望基于< select>动态显示/隐藏颜色字段.对于widget_type.
<% form_for @widget do |f| %>
<%= f.select :type,Widget::ALL_WIDGET_TYPES %>
<div class='hiddenUnlessWidgetTypeIsFooOrBaz'>
<%= f.label :color %>
<%= f.text_field :color %>
</div>
<% end %>
我可以轻松地编写一些jQuery来监视widget_type上的onChange事件,但这意味着将某种WidgetTypesThatRequireColor常量放入我的Javascript中.足够容易手动完成,但是很可能会与Widget模型类断开连接.
尽管我考虑过使用content_for(:js)并在模板页脚中使用yield:js,但我不希望在视图中直接输出Javascript.还有更好的主意吗?
最佳答案