2016-12-19 8 views
0

私は、リソースがネストされている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を取得:私はまた、次のように設定しようとしました。

誰もが考えていますか?

は何度も何度も再読み込み私のコードの後に​​、私は単純に次の操作を実行するために必要な、だから、事前

+0

最後のコードスニペットで、 '@ chapter'がnilではないことを確認できますか?また、最後の2番目のスニペットはうまく見えません。 '@ manga.chapters.scans' - これは' @ chapter.scans'に変更する必要があります。 @chapter = Chapter.find_by(chapter_number:params [:])の代わりに '@chapter = Chapter.find(params [:id])'を指定していれば、最後のスニペットでは@chapterはnilではありません: – 31piy

+0

最後のスニペットでは、 id]) 'を実行します。私がそうすると、チャプターのIDを見つけることができないと私に伝えます(私はどこにも設定していないので論理的だと思います) – Jaeger

+0

'.find()'は常にIDで検索し、 DBで必要なモデルを見つけます。一方、 '.find_by_ *'メソッドはエラーを発生させず、必要なモデルがDBに見つからない場合は 'nil'を返します。 – 31piy

答えて

0

にありがとう:

def set_peji 
    @chapter = Chapter.find_by(chapter_number: params[:chapter_id]) 
    @peji = @chapter.pejis.find_by(scan_number: params[:id]) 
end 

それは関係ありませんので、だから私は@mangaを削除する必要がありましたスキャンのchapter_idをチャプタの番号に設定します。

関連する問題