質問

1対多の関係を使用しているときに問題が発生しました。各シリーズに1つのパブリッシャーがあり、その1つのパブリッシャーに多くのシリーズがあるようにします。

これは私のパブリッシャーモデルです:

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

NameError:uninitialized constant Publisher :: Seriesの最後の行でテストが失敗します。

出版社とシリーズを保存しようとしましたが、うまくいきませんでした。セリエを1つだけにしてみましたが、同じエラーが発生します。

私はRailsとRubyを使い始めたばかりなので、ここでは困惑しています。私は何を間違えていますか?

役に立ちましたか?

解決

コメントに記載されている実際の質問に対処するには(モデルに「シリーズ」という名前を付けるにはどうすればよいですか?)、Railsの Inflector は、デフォルトの複数形化規則に対するこの例外を認識しています。

以下を config / environment.rb に追加します:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable 'series'
end

これにより、モデルに Series という名前を付けることができます。 script / console を使用して動作することをテストできます:

>> "series".pluralize    #=> "series"
>> "series".singularize  #=> "series"

&#8212; Pluralizer とそれを使用してみたところです。 Railsには組み込みの series という単語の処理方法に関する知識があるように見えます。 お試しください

他のヒント

ジョンの答えが最高だと思います。

has_many宣言でクラス名を直接指定することもできます

has_many :series, :class_name => 'Serie'

has_many関係名は問題ありませんが、モデル名が間違っています。

シリーズの単数形と複数形はどちらもシリーズなので、モデルの名前をSerieからSeriesに変更する必要があります。その後、すべてが正常になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top