我尝试使用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成为一个类或常量。但我不明白为什么。
由于
答案 0 :(得分:1)
通常,当您要使用foreign_key
以外的属性关联外部模型(例如:has_one
)时,some_model
选项应与some_model_id
关联一起使用。
您使用has_one
有四种不同的auteurs_id
关联。
我认为您拥有Auteur
模型,并希望Bibliography
模型有四个关联:auteur_un
,:auteur_deux
,:auteur_trois
, :auteur_quatre
,每个都指向不同的Auteur
实例。
如果情况确实如此,我想您想使用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_id
,auteur_deux_id
,auteur_trois_id
和auteur_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
但最好的做法是遵守铁路公司的惯例。