2014-01-23 2 views
2

Использование рельсов 4, когда я хочу, чтобы сделать форму (с simple_form) из объекта Document :: Document У меня есть эта ошибка: undefined method document_type_id for #<Document::Document:0x007fada4a50240>рельсы 4 simple_form belongs_to ошибка ассоциации неопределенного метода

Здесь стал частью моей модели:

class Document::Document < ActiveRecord::Base 
    ... 
    belongs_to :document_type, -> {include(:translations)}, :class_name => 'Document::Type' 
    ... 
end 

новый метод моего контроллера:

def new 
    @document = Document::Document.new 
end 

и часть формы с simple_form:

=f.association :document_type, prompt: t('document.documents.form.choose_document_type'), collection: Document::Type.includes(:translations) 

Ошибка:

undefined method `document_type_id' for #<Document::Document:0x007fada4a50240> 
Extracted source (around line #14): 

    11 .row 
    12  =f.input :language, collection: languages_list, prompt: t("document.documents.form.choose_language"), label_html: tooltip(t('document.documents.forms.tooltips.language')), wrapper_html: {class: 'columns large-4'}, input_html: {class: 's2'} 
    13  =f.input :study_level, prompt: t('document.documents.form.choose_study_level'), label_html: tooltip(t('document.documents.forms.tooltips.study_level')), wrapper_html: {class: 'columns large-4'}, input_html: {class: 's2'} 
    14  =f.association :document_type, prompt: t('document.documents.form.choose_document_type'), collection: Document::Type.includes(:translations), label_html: tooltip(t('document.documents.forms.tooltips.type')), wrapper_html: {class: 'columns large-4'}, input_html: {class: 's2'} 
    15  -#=f.association :domains, collection: Domain.includes(:translations).order('name ASC'), label_html: tooltip(t('document.documents.forms.tooltips.domains')), input_html: {class: 's2'} 
    16 .form-actions 
    17  =f.button :submit, t('document.documents.form.submit') 

Почему эта ошибка?

Я модернизирован от рельсов 3.2. Прежде чем все будет отлично.

В рельсах 3.2 я добавил:

attr_accessible :document_type_id, ... 

Может быть, ошибка приходит оттуда

ответ

2

Извините за неудобство.

Это была проблема миграции. Кто-то еще изменил файл миграции, и поле document_type_id больше не было в таблице базы данных.

Мне потребовалось некоторое время, пока я не найду эту глупую проблему.

Спасибо за ответ и извиниться

1

Проверьте версию simple_form Gem. Должно быть> = 3.0.0 Не знаете, как работает simple_form gem, но рельсы 4 больше не используют attr_accessible (все же вы можете установить драгоценный камень, но скорее всего он будет устаревшим)

Rails 4 теперь использует Strong Parameters. В основном работает так: вы определяете в частном методе в контроллере, параметры которого используются в белом списке, поэтому, если ваш document_type_id отсутствует в списке, он игнорируется.

Генератор эстакад Rails 4 автоматически добавляет этот метод и принимает все параметры по умолчанию, если вы хотите посмотреть, как он выглядит.

Надеюсь, это поможет!

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