2012-06-25 2 views
6

В моем приложении Rails 3.2.6 у меня есть модель, представляющая набор данных о виджетах. На мой взгляд, правильное имя для этого класса - WidgetData, множественное число, потому что у меня есть несколько элементов данных для каждого виджетов.Rails data/dumum inflection issue

Если я спрошу Rails, чтобы создать форму для этого класса:

= form_for @widget_data do |f| 
    ... 

Я получаю сообщение об ошибке ActionView::Template::Error (undefined method 'widget_datum_path' .... Предположительно, это связано с правилом перегиба данных/данных.

Я не уверен, как лучше всего разрешить это: я мог бы позволить Rails диктовать, что моя модель должна быть действительно WidgetDatum. Или я мог бы как-то отключить использование правила перегиба в этом конкретном случае, но я не уверен, как это лучше всего сделать. Консультация приветствуется.

Предвосхищая один из возможных вариантов ответа: причина того, что модель не только под названием Widget является то, что у меня есть класс фасада с именем, который уже, в котором представлены более богатый вид виджета, включающего как WidgetData и другую информацию, а также.

ответ

10

Добавьте этот код в файл: «множественном числе, потому что у меня больше, чем один элемент данных в виджет» конфигурация/Инициализаторы/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, потому что в таблице содержится много WidgetDatums. Но когда в Rails каждая строка данных создается как отдельный объект, основанный на вашем классе модели. Он будет работать в любом случае, пока вы правильно настроите свои перегибы. Обычно я стараюсь это делать только при построении интерфейса с существующей моделью данных. Но даже тогда вы поймете, что иногда лучше создавать новую модель данных рельсов поверх существующей модели, используя self.table_name = 'old table name convention' в ваших моделях.

+0

Возможно, это должно быть inflect.irregular 'widget_data' – 0x4a6f4672

1

Если вы хотите изменить правило перегиба в этом случае, вы можете взглянуть на this question.

+0

Спасибо. Я действительно искал ответы, прежде чем публиковать свой вопрос; ваши навыки поиска явно превосходят мои! –

 Смежные вопросы

  • Нет связанных вопросов^_^