我有一个
Widget
带继承的模型(我使用单表继承,但对于每个表的类来说同样有效)。一些子类需要一个特定的字段;其他的则不需要。
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
)并希望动态显示/隐藏
color
基于
<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来监视
onChange
事件对
WigGeType类型
,但这意味着
WidgetTypesThatRequireColor
在我的javascript中保持不变。很容易手动操作,但很可能会与
小装置
模型类。
我不希望直接在视图中输出javascript,尽管我已经考虑过使用
content_for(:js)
并且有一个
yield :js
在我的模板页脚。有更好的主意吗?