在我的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数据模型会更好。

10-06 15:30
查看更多