在我的Rails 3.2.6应用程序中,我有一个模型,表示有关小部件的数据集合。在我看来,此类的正确名称是WidgetData
,是复数形式,因为每个小部件都有多个数据项。
如果我要求Rails为该类生成一个表单:
= form_for @widget_data do |f|
...
我收到错误
ActionView::Template::Error (undefined method 'widget_datum_path' ...
。大概是由于Rails数据/基准变形规则所致。我不确定如何最好地解决此问题:我可以让Rails指示我的模型实际上应该是
WidgetDatum
。或者,我可以在这种特殊情况下以某种方式禁用拐点规则,但是我不确定如何最好地做到这一点。欢迎咨询。可以预料到一个可能的答案:该模型不仅仅称为
Widget
的原因是我已经有一个名为façade的外观类,它提供了包含WidgetData
和其他信息的小部件的更丰富 View 。 最佳答案
将此代码添加到文件中:config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'widgetdata', 'widgetdatas' # or whatever you want your plural to be
end
要解决您对“复数,因为每个小部件我有多个数据项”的评论。
这个想法是小部件数据的每一行都是它自己的对象。 Active Record将为每一行数据创建一个WidgetData实例。您的数据库表应命名为WidgetData(根据Rails约定),因为该表包含许多WidgetDatum。但是在Rails中时,每行数据都将根据模型类实例化为一个单独的对象。只要正确配置拐点,它就会以任何一种方式起作用。我通常仅在基于现有数据模型构建接口(interface)时才尝试这样做。但是即使那样,您仍然会意识到有时在模型中使用
self.table_name = 'old table name convention'
在现有模型之上构建一个新的Rails数据模型会更好。