【发布时间】:2010-04-19 16:47:48
【问题描述】:
我有一个带有继承的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),并希望根据 <select> 的 widget_type 动态显示/隐藏 color 字段。
<% 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 事件,但这意味着在我的 Javascript 中放置某种 WidgetTypesThatRequireColor 常量。手动操作很容易,但它可能会与 Widget 模型类断开连接。
虽然我考虑过使用content_for(:js) 并在模板页脚中有yield :js,但我不希望直接在我的视图中输出Javascript。有更好的想法吗?
【问题讨论】:
标签: javascript jquery ruby-on-rails ruby dry