3
我有一个Widget
模型与继承(我使用单表继承,但它同样有效的类每表)。一些子类需要特定的字段;别人不会。如何在服务器端Ruby和客户端Javascript之间干掉业务逻辑?
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来观看onChange
事件的widget_type
,但是这将意味着将某种WidgetTypesThatRequireColor
不断的在我的JavaScript。很容易手动完成,但很可能会从Widget
模型类中断开连接。
我不想直接在我的视图中输出Javascript,尽管我已经考虑在我的模板页脚中使用content_for(:js)
并且有一个yield :js
。任何更好的想法?
我喜欢它。这工作完美。 (在Rails中渲染有点尴尬,但可以很容易地提取到帮手中,并且它提供了很好的关注分离。) – 2010-04-19 22:01:07