ActiveRecord 및 관계가있는 NameError를 얻습니다
-
03-07-2019 - |
문제
하나에서 많은 관계를 사용할 때 문제가 발생합니다. 각 시리즈에 하나의 게시자가 있고 그 출판사는 많은 시리즈를 가지고 싶습니다.
이것은 내 게시자 모델입니다.
class Publisher < ActiveRecord::Base
validates_presence_of :name
has_many :series
end
이것은 내 세리에 모델입니다.
class Serie < ActiveRecord::Base
belongs_to :publisher
end
이것은 실패한 테스트입니다.
test "a publisher should have a list of series" do
@publisher = Publisher.new :name => "Standaard Uitgeverij"
@series = [ Serie.new(:name => "De avonturen van Urbanus", :publisher => @publisher),
Serie.new(:name => "Suske en Wiske", :publisher => @publisher) ]
assert_equal @series, @publisher.series
end
Test는 Nameerror : Unitialized Constant Publisher :: Series와 함께 마지막 줄에서 실패합니다.
게시자와 시리즈를 저장하려고했지만 작동하지 않았습니다. 하나의 세리로 만 시도했지만 동일한 오류가 발생합니다.
난 그냥 레일과 루비로 시작했기 때문에 여기서 잃어 버렸습니다. 내가 뭘 잘못하고 있죠?
해결책
귀하의 의견에 언급 된대로 귀하의 실제 질문을 해결하기 위해 (내 모델 "시리즈"를 어떻게 지정할 수 있습니까?), 당신은 레일을 만들어야합니다 ' 인자 이 예외를 기본 복수 규칙에 대해 알고 있습니다.
다음을 추가하십시오 config/environment.rb
:
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable 'series'
end
이렇게하면 모델을 이름으로 지정할 수 있습니다 Series
. 당신은 그것이 사용했음을 테스트 할 수 있습니다 script/console
:
>> "series".pluralize #=> "series"
>> "series".singularize #=> "series"
- 방금 사용해 보았다고 말해야합니다 다원자 그리고 Rails는 단어를 처리하는 방법에 대한 지식이있는 것 같습니다. 시리즈 내장. 직접 시도해보십시오.
다른 팁
요한의 대답이 최고라고 생각합니다.
Has_many 선언에서 클래스 이름을 직접 지정할 수도 있습니다.
has_many :series, :class_name => 'Serie'
당신의 has_many 관계 이름은 괜찮지 만 모델 이름은 잘못되었습니다.
단수 및 복수의 시리즈는 모두 시리즈이므로 Serie에서 Series로 모델의 이름을 바꿔야합니다. 그 후에는 모든 것이 괜찮을 것입니다.