私は、リソースがネストされている3つの足場を持っています:mangas > chapters > scans
。訪問者がマンガの章を読むことを可能にするウェブサイトを作成しようとしていますが、scan_controllerの設定ツールを設定するのが難しいです。ネストされた足場のセッターに関する問題
私は従うようにいくつかの制約があります:漫画足場はFriendlyIdを使用し、両方の章とスキャンはそのチャプター/スキャン数(整数)を介してURLに示され
ので、漫画のコントローラのために、私がやりました次のようになります。
private
def set_manga
@manga = Manga.friendly.find(params[:id])
end
私は単純にマニュエルに従いましたが、問題はありません。 chapter_controllerについては
、私はこれは私が私が欲しい漫画にリンクされているすべての章を取得することができ、そしてそれらだけこの
private
def set_chapter
@manga = Manga.find_by(slug: params[:manga_id])
@chapter = @manga.chapters.find_by(chapter_number: params[:id])
end
をしました。さらに、私はリンクにidとしてchapter_numberを渡すことになる。
とは、最後に、私はscan_controllerのためにこれを試してみました:
private
def set_scan
@manga = Manga.find_by(slug: params[:manga_id])
@chapter = @manga.chapters.find_by(chapter_number: params[:id])
@scan = @manga.chapters.scans.find(params[:id])
end
しかし、この時点で、私は満足のいく結果を得ることができません。この構成では、私はundefined method 'pejis' for #<Chapter::ActiveRecord_Associations_CollectionProxy:0x0000000713d1a0>
を取得します。
private
def set_scan
@chapter = Chapter.find_by(chapter_number: params[:id])
@scan = @chapter.scans.find_by(scan_number: params[:id])
end
しかし、私は、それは、レールコンソールで事前に定義されたIDを持つすべてのエラーを返さないので、奇妙です
undefined method 'pejis' for nil:NilClass
を取得:私はまた、次のように設定しようとしました。
誰もが考えていますか?
は何度も何度も再読み込み私のコードの後に、私は単純に次の操作を実行するために必要な、だから、事前
最後のコードスニペットで、 '@ chapter'がnilではないことを確認できますか?また、最後の2番目のスニペットはうまく見えません。 '@ manga.chapters.scans' - これは' @ chapter.scans'に変更する必要があります。 @chapter = Chapter.find_by(chapter_number:params [:])の代わりに '@chapter = Chapter.find(params [:id])'を指定していれば、最後のスニペットでは@chapterはnilではありません: – 31piy
最後のスニペットでは、 id]) 'を実行します。私がそうすると、チャプターのIDを見つけることができないと私に伝えます(私はどこにも設定していないので論理的だと思います) – Jaeger
'.find()'は常にIDで検索し、 DBで必要なモデルを見つけます。一方、 '.find_by_ *'メソッドはエラーを発生させず、必要なモデルがDBに見つからない場合は 'nil'を返します。 – 31piy