【问题标题】:rails 4 simple_form belongs_to association undefined method errorrails 4 simple_form belongs_to 关联未定义方法错误
【发布时间】:2014-01-23 20:28:27
【问题描述】:

使用 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, ...

也许错误来自那里

【问题讨论】:

    标签: activerecord ruby-on-rails-4 simple-form


    【解决方案1】:

    很抱歉给您带来不便。

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

    我花了一段时间才发现这个愚蠢的问题。

    感谢您的回复和道歉

    【讨论】:

      【解决方案2】:

      检查 simple_form Gem 的版本。应该 >= 3.0.0 不确定 simple_form gem 是如何工作的,但是 rails 4 不再使用 attr_accessible (不过,您可以安装 gem,但它可能很快就会被弃用)

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

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

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多