2016-12-16 4 views
0

私は現在、いくつかのマンガを読むことができるウェブサイトを作成しています。構造は次の通りです(私が働いている人の尋ねたとおりです):まず、すべてのマンガタイトル(ナルト、ワンピース、ワンパンチなど)があります。そして、マンガの1つをクリックすると、マンガにリンクされている章が表示されます。その後、最終的にマンガのスキャンにアクセスできます。足場から別の足場にデータを渡すにはどうしたらいいですか?

2つの異なる足場(マンガ用とチャプター用)を使いましたが、スタッフがマンガに章を追加したいときにRailsに伝える方法はわかりませんこの章はリンクされています。

私は漫画のタイトル(mangas#show)から章創造へのリンク(chapters#new)を作成し、以下のようチャプターの作成URLに漫画のIDを渡すことにしました:

routes.rbを

get '/chapters/new/:manga_id' => 'chapters#new', as: :new_chapter

漫画#が表示さ

<%= link_to 'Add a new chapter', new_chapter_path(@manga.attributes['id']) %> 

(私はFriendlyIdを使用しているので、これは私が代わりにスラグの本当のIDを取得するために見つけることができる唯一の方法だった)

これまでのところ、私はchapters#newアクションに到達したとき、私のURLは次のようになります。http://localhost:3000/chapters/new/1 1はリンクと共に送信された漫画IDである。次のように

そして、コントローラで、私はIDを隔離:

def create 
    @chapter = Chapter.new(chapter_params) 

    if @chapter.save 
     @chapter.manga = request.original_url.split('/').last.to_i 
     end 
     redirect_to @chapter, notice: 'Chapter was successfully created.' 
    else 
     render :new 
    end 
    end 

をしかし、フォームを送信するとき、私は次のエラーを取得する:

Manga(#106972960) expected, got Fixnum(#10269260) 

私はこれがあると信じてI理由彼はオブジェクト全体を待っている間にコントローラに数値を与えましたが、これで十分だと思っていましたが、今は思考がなくなります。

誰でもアイデアはありますか?

答えて

0

あなたのサイトを入れ子にすることをお勧めします。そうすることで、すべての重要な事柄についてCRUD操作ができます。たとえば、マンガモデル、チャプターモデル、スキャンモデルがあります。

マンガモデルは個々のマンガを保存し、それぞれのマンガを作成、更新、削除などできます。 チャプターモデルは、あなたのマンガモデルの個々の章を保存します。 スキャンモデルには、各章の個々のスキャンが保存されます。

ヘッドビルディングのリンクを解除する必要はありません。 Railsはあなたのためにすべてを行います。あなたのルートでは、このようにネストされたリソース(コントローラ)を指定するだけです。RB

resources :Manga do 
    resources :Chapter do 
     resources Scans 
    end 
    end 

これはすべてのあなたのリソースとのリンクの上にCRUD操作を持つために必要なすべてのルートは、次のように自動的に整理され定義されています。あなたは新しいマンガを作成すると

yourdomain.com/manga/manga_number/chapter/chapter_number/scans/scan_number 

yourdomain.com/manga/new 

あなたのマンガに新しい章を作成するとき:

yourdomain.com/manga/manga_number/chapter/new 
ルーターであなたのリソースを入れ子に

yourdomain.com/manga/manga_number/chapter/chapter_number/scans/new 

この感謝のすべて:あなたの章の新しいスキャンを作成

+0

こんにちは、申し訳ありませんが、私は数日間コードに取り組むことができませんでした。私はちょうど1つの質問があります:すべてがかなりスムーズに行った(1つの微調整または2つが必要でした)作成フォームでは、引数として "chapter"や "@chapter"を受け入れないので、 '' new_manga_chapters_path' "というフォームを表示させるまでいくつか試してみましたが、私はまだチャプターを保存する問題がありますform_forの引数として何を入れればいいですか? – Jaeger

+0

ネストされた新しいエントリを作成するときは、 "new_manga_chapters_path"で見つかった正しいパスを指定する必要があります。あなたのチャプターのコントローラー内のインスタンス変数とあなたのフォーム内のそのインスタンス変数を参照するRailsは残りの部分を処理します後であなたのモデルを更新する必要があるので、それは、マンガの章と章のスキャンとして保存されます。 –

関連する問題