【问题标题】:NameError, uninitialized constantNameError,未初始化的常量
【发布时间】:2016-12-20 11:00:19
【问题描述】:

我正在尝试使用 rails 提交一个简单的表单。

class BibliographiesController < ApplicationController
   def creer #this has been localized for create
       @bibliography = Bibliography.new(bibliographie_params)
       @bibliography.save
       redirect_to @bibliography
   end
   #etc etc

private

    def bibliographie_params
        params.require(:bibliographie).permit(:titre, :soustitre, :auteur_un, :auteur_deux, :auteur_trois, :auteur_quatre, :genre, :recueil, :review, :revue_numero, :annee, :revue_page, :editeur, :lieu, :commentaire)
    end
end

迁移文件包含相同的字段。 titre 和 soustitre 都是字符串,而 auteur_un 是一个整数。

当我提交表单时,我收到一个错误,即:

NameError in BibliographiesController#creer
uninitialized constant Bibliography::AuteurUn

params_hash 包含:

"bibliographie"=>{
"titre"=>"La vie urbaine à Douai au Moyen-Âge", 
"soustitre"=>"rien", 
"auteur_un"=>"1", 
"genre"=>"source", 
"recueil"=>"aucun", 
"review"=>"", 
"revue_numero"=>"", 
"annee"=>"", 
"revue_page"=>"", 
"editeur"=>"", 
"lieu"=>"", 
"commentaire"=>""}

这是我的参考书目课程:

class Bibliography < ApplicationRecord
    has_one :auteur_un, foreign_key: "auteurs_id"
    has_one :auteur_deux, foreign_key: "auteurs_id"
    has_one :auteur_trois, foreign_key: "auteurs_id"
    has_one :aauteur_quatre, foreign_key: "auteurs_id"
    has_one :review, foreign_key: "reviews_id"
end

似乎 rails 期望 auteur_un 是一个类或常量。但我不明白为什么。

谢谢

【问题讨论】:

  • 您可以编辑您的问题并为您的Bibliography 课程添加颂歌吗?也许它是从那里得到这个想法的? (我猜)。

标签: ruby-on-rails rails-activerecord


【解决方案1】:

一般来说,foreign_key 选项应与has_one 关联在您想关联外部模型时使用,例如:some_model,使用some_model_id 以外的属性。

您有四个不同的has_one 关联,使用auteurs_id

在我看来,您有一个 Auteur 模型,并且您希望 Bibliography 模型有四个关联 :auteur_un:auteur_deux:auteur_trois:auteur_quatre,每个关联指向不同的 @ 987654335@ 实例。

如果确实如此,我认为您想使用belongs_to 关联,而不是:

class Bibliography < ApplicationRecord
    belongs_to :auteur_un, class_name: "Auteur"
    belongs_to :auteur_deux, class_name: "Auteur"
    belongs_to :auteur_trois, class_name: "Auteur"
    belongs_to :auteur_quatre, class_name: "Auteur"
    ...
end

该关联预计Bibliography 模型具有auteur_un_idauteur_deux_idauteur_trois_idauteur_quatre_id,因此您需要修改“auteur”列(将“_id”附加到每个)。例如,您的私有参数方法将更改为:

def bibliographie_params
    params.require(:bibliographie).permit(:titre, :soustitre, :auteur_un_id, :auteur_deux_id, :auteur_trois_id, :auteur_quatre_id, :genre, :recueil, :review, :revue_numero, :annee, :revue_page, :editeur, :lieu, :commentaire)
end

或者,您可以使用foreign_key 选项,而不更改列名:

class Bibliography < ApplicationRecord
    belongs_to :auteur_un, class_name: "Auteur", foreign_key: "auteur_un"
    belongs_to :auteur_deux, class_name: "Auteur", foreign_key: "auteur_deux"
    belongs_to :auteur_trois, class_name: "Auteur", foreign_key: "auteur_trois"
    belongs_to :auteur_quatre, class_name: "Auteur", foreign_key: "auteur_quatre"
    ...
end

但最好遵循 Rail 的约定。

【讨论】:

  • 谢谢切斯特。我确实想使用“has_and_belongs_to_many”关联,因为每个作者可以有很多书,每本书可以有很多作者。但是,我没有看到如何填充我的 html 表单以允许添加多个作者。
  • @thiebo,看起来有一个名为 cocoon 的 gem 可以用来解决这个问题。请参阅this 问题。
猜你喜欢
  • 1970-01-01
  • 2015-01-19
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2016-06-12
  • 2015-03-01
  • 2018-06-26
相关资源
最近更新 更多