2012-06-25 13 views
6

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

私は、このクラスのためのフォームを生成するためのRailsのを頼む場合:

= form_for @widget_data do |f| 
    ... 

私はエラーActionView::Template::Error (undefined method 'widget_datum_path' ...を取得します。おそらく、これはRailsのデータ/データ変換規則のためです。

これを解決するにはどうすればよいかわかりません。私のモデルは実際にはWidgetDatumであるはずです。または、私は何とかこの特定のケースで変則ルールの使用を無効にすることができますが、それを行うにはどうすればよいかわかりません。アドバイスを歓迎します。

モデルが単にWidgetと呼ばれているわけではないという理由は、すでにfaçadeクラスを持っていて、WidgetDataと他の情報の両方を組み込んだウィジェットの豊富なビューを示しているということです。

答えて

10

ファイルにこのコードを追加します。「私はウィジェットごとのデータの複数の項目を持っているので、複数の」設定/初期化子/ inflections.rb

ActiveSupport::Inflector.inflections do |inflect| 

    inflect.irregular 'widgetdata', 'widgetdatas' # or whatever you want your plural to be 

end 

にあなたのコメントに対処するために

アイデアは、ウィジェットデータの各行がそれ自身のオブジェクトであるという考えです。アクティブレコードは、データの各行に対して1つのWidgetDataインスタンスを作成します。テーブルには多くのWidgetDatumが格納されているため、データベーステーブルの名前は(Railsの規則に従って)WidgetDataにする必要があります。しかし、Railsでは、データの各行は、モデルクラスに基づいて個々のオブジェクトとしてインスタンス化されます。あなたの曲調が正しく設定されていればどちらの方法でも動作します。私は通常、既存のデータモデルにインターフェイスを構築するときにこれを行うよう試みます。しかし、モデルでself.table_name = 'old table name convention'を使用すると、既存のモデルの上に新しいレールデータモデルを構築する方がよい場合もあります。

+0

おそらくinflect.irregularである必要があります 'widget_data' – 0x4a6f4672

1

この場合、変曲ルールを変更する場合は、this questionをご覧ください。

+0

ありがとうございました。私は質問を投稿する前にSOの答えを探しました。あなたの検索スキルは明らかに私のものより優れています! –