2016-12-19 2 views
0

Я пытаюсь представить простую форму с использованием рельсов.NameError, неинициализированная константа

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 

Это похоже, что рельсы ожидают, что auteur_un будет классом или константой. Но я не понимаю, почему.

Благодаря

+0

Можете ли вы изменить свой вопрос и добавить оду в свой класс 'Bibliography'? может быть, это идея оттуда? (Я догадываюсь). –

ответ

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» к каждому). Например, ваш частный метод PARAMS изменится на:

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 

Но было бы лучше практика, чтобы пойти с конвенциями рейл ,

+0

Спасибо Честер. Я действительно хотел использовать ассоциацию 'has_and_belongs_to_many', поскольку у каждого автора может быть много книг, и каждая книга может иметь много авторов. Но тогда я не видел, как заполнить форму html, чтобы добавить нескольких авторов. – thiebo

+0

@thiebo, похоже, есть драгоценный камень под названием [кокон] (https://github.com/nathanvda/cocoon), который можно использовать для решения этой проблемы. См. [This] (http://stackoverflow.com/questions/8352977/rails-forms-for-has-many-through-association-with-additional-attributes) вопрос. – chester

Смежные вопросы