使用rails 4,当我想从对象Document :: Document渲染表单(带有simple_form)时出现此错误:undefined method document_type_id for #<Document::Document:0x007fada4a50240>
这是我模特的一部分:
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升级。在一切运作良好之前。
在rails 3.2中我添加了:
attr_accessible :document_type_id, ...
也许错误来自那里
答案 0 :(得分:2)
很抱歉给您带来不便。
这是移民问题。其他人更改了迁移文件,并且数据库表中的字段document_type_id
不再存在。
我花了一段时间才找到这个愚蠢的问题。
感谢您的回复并道歉
答案 1 :(得分:1)
检查simple_form Gem的版本。应该是&gt; = 3.0.0 不确定simple_form gem是如何工作的,但是rails 4不再使用attr_accessible了(你仍然可以安装gem,但它可能很快就会被弃用)
Rails 4现在使用Strong Parameters。基本上这样工作:你在控制器中的私有方法中定义哪些参数被列入白名单,所以如果你的document_type_id不在列表中,它将被忽略。
Rails 4脚手架生成器会自动添加此方法并默认接受所有参数,如果你想看看它的样子。
希望它有所帮助!