2014-01-23 84 views
2

从对象文件::文件使用Rails 4,当我想要呈现的形式(与simple_form)我有这样的错误: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') 

为什么这个错误?

我从rails 3.2升级。一切都很好之前。

在轨3.2我补充说:

attr_accessible :document_type_id, ... 

也许错误是从那里

回答

2

对不起,不方便。

这是一个迁移问题。其他人更改了迁移文件,并且数据库表中不存在document_type_id字段。

我花了一段时间,直到我找到这个愚蠢的问题。

感谢回复并致歉

1

来检查simple_form宝石的版本。应该是> = 3.0.0 不知道simple_form gem是如何工作的,但rails 4不再使用attr_accessible(仍然可以安装gem,但很可能会很快弃用)

Rails 4现在使用Strong Parameters。基本上是这样工作的:你在控制器的私有方法中定义哪些参数被列入白名单以便使用,所以如果你的document_type_id不在列表中,它将被忽略。

Rails 4脚手架生成器会自动添加此方法并默认接受所有参数,如果您想查看它的外观。

希望它有帮助!

相关问题