2012-06-25 5 views
6

레일즈 3.2.6 앱에는 위젯에 관한 데이터 컬렉션을 나타내는 모델이 있습니다. 위젯 당 하나 이상의 데이터 항목이 있기 때문에이 클래스의 올바른 이름은 WidgetData, 복수형입니다. 나는이 클래스의 형태로 생성 레일을 요구하는 경우에레일 데이터/데이텀 굴절 문제

:

= form_for @widget_data do |f| 
    ... 

을 나는 오류 ActionView::Template::Error (undefined method 'widget_datum_path' ...를 얻을. 아마도 이것은 Rails 데이터/데이텀 굴절 규칙 때문입니다.

이 문제를 해결하는 가장 좋은 방법이 확실하지 않습니다. 레일스에서 ​​내 모델이 실제로 WidgetDatum이어야한다고 지시 할 수 있습니다. 아니면 어떻게 든이 특정 경우에 굴절 규칙을 사용하지 못하게 할 수는 있지만 최선의 방법은 확실하지 않습니다. 환영합니다.

하나의 가능한 답을 예상하려면 모델이 단지 Widget으로 불리지 않는다는 이유는 이미 faade 클래스를 가지고 있기 때문에 WidgetData과 다른 정보를 모두 포함하는 위젯에 대한보다 풍부한 시각을 제공합니다.

답변

10

파일에 다음 코드를 추가합니다. "나는 위젯 당 하나 개 이상의 데이터 항목을 가지고 있기 때문에, 복수의"설정/초기화/inflections.rb

ActiveSupport::Inflector.inflections do |inflect| 

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

end 

에 당신의 코멘트를 해결하기 위해

아이디어는 위젯 데이터의 각 행이 자신의 객체라는 것입니다. 활성 레코드는 데이터 행마다 WidgetData 인스턴스 하나를 만듭니다. 테이블에 많은 WidgetDatum이 있기 때문에 데이터베이스 테이블의 이름을 (Rails 규칙에 따라) WidgetData로 지정해야합니다. 그러나 Rails에서 각 데이터 행은 모델 클래스를 기반으로 개별 객체로 인스턴스화됩니다. 굴절을 올바르게 구성하는 한 어느 방식 으로든 작동합니다. 필자는 기존 데이터 모델에 인터페이스를 구축 할 때만이 작업을 시도합니다. 그러나 심지어 모델에 self.table_name = 'old table name convention'을 사용하여 기존 모델 위에 새로운 레일 데이터 모델을 만드는 것이 더 나을 때가 있습니다.

+0

아마 inflect.irregular이어야합니다 'widget_data' – 0x4a6f4672

1

이 경우 굴곡 규칙을 변경하려는 경우 this question을 볼 수 있습니다.

+0

감사합니다. 나는 내 질문을 게시하기 전에 그 대답을 검색했다. 귀하의 검색 기술은 분명히 내 것보다 우수합니다! –