7

私の Rails 3.2.6 アプリには、ウィジェットに関するデータのコレクションを表すモデルがあります。私の考えではWidgetData、ウィジェットごとに複数のデータ項目があるため、このクラスの正しい名前は複数形です。

このクラスのフォームを生成するよう Rails に依頼すると、次のようになります。

= form_for @widget_data do |f|
  ...

エラーが発生しますActionView::Template::Error (undefined method 'widget_datum_path' ...。おそらく、これは Rails の data/datum inflection ルールによるものです。

これを解決する最善の方法がわかりません。Rails に、モデルが実際にはWidgetDatum. または、この特定のケースでは、どうにかして屈折規則の使用を無効にすることもできますが、それを行う最善の方法がわかりません。アドバイス歓迎。

考えられる答えの 1 つを予想すると、モデルが呼び出されただけではない理由は、そのWidget名前のファサード クラスが既にあるため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 のインスタンスを 1 つ作成します。テーブルには多数の WidgetDatum が含まれるため、データベース テーブルには (Rails の規則に従って) WidgetData という名前を付ける必要があります。しかし、Rails では、データの各行は、モデル クラスに基づいて個別のオブジェクトとしてインスタンス化されます。屈折を正しく構成する限り、どちらの方法でも機能します。私は通常、既存のデータ モデルに基づいてインターフェイスを構築する場合にのみ、これを実行しようとします。しかし、それでも、既存のモデルの上に新しい Rails データ モデルを構築し、モデル内で使用する方が良い場合があることに気付くでしょうself.table_name = 'old table name convention'

于 2012-06-25T16:49:31.220 に答える
1

この場合の屈折規則を変更しようとしている場合は、この質問を見ている可能性があります。

于 2012-06-25T16:23:42.280 に答える