7

在我的 Rails 3.2.6 应用程序中,我有一个模型表示有关小部件的数据集合。在我看来,这个类的正确名称是WidgetData复数,因为每个小部件有不止一项数据。

如果我让 Rails 为这个类生成一个表单:

= form_for @widget_data do |f|
  ...

我得到一个错误ActionView::Template::Error (undefined method 'widget_datum_path' ...。这大概是因为 Rails 数据/数据变形规则。

我不确定如何最好地解决这个问题:我可以让 Rails 规定我的模型实际上应该是WidgetDatum. 或者我可以在这种特殊情况下以某种方式禁用变形规则,但我不确定如何最好地做到这一点。欢迎咨询。

预测一个可能的答案:不只是调用模型的原因Widget是我已经有一个名为 that 的外观类,它提供了一个更丰富的小部件视图,同时包含了WidgetData和其他信息。

4

2 回答 2

11

将此代码添加到文件中: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 实例。您的数据库表应命名为(根据 Rails 约定)WidgetData,因为该表包含许多 WidgetDatum。但是在 Rails 中,每一行数据都会根据您的模型类实例化为一个单独的对象。只要您正确配置变形,它就会以任何一种方式工作。我通常只在现有数据模型上构建接口时尝试这样做。但即便如此,您也会意识到有时在现有模型之上构建一个新的 rails 数据模型会更好,并self.table_name = 'old table name convention'在您的模型中使用。

于 2012-06-25T16:49:31.220 回答
1

如果您希望在这种情况下更改变形规则,您可以看看这个问题

于 2012-06-25T16:23:42.280 回答