2016-08-09 238 views
0

Ich fühle mich wie die Lösung für diese ist eigentlich ganz einfach, aber ich kann es nicht herausfinden.Probleme mit "show" und "index" Routen im Modell mit vielen zu einer Beziehung Ruby on Rails

https://github.com/kingdavidek/StuddyBuddy

ich eine App schreibe mir nicht-Fiction-Bücher zusammenfassen zu helfen. Ich möchte eine Ansicht für das Buch (oder Stück) und dann eine Eins-zu-Viele-Beziehung mit Kapiteln/Abschnitten haben, wobei jeder Abschnitt seine eigene Ansicht hat. Ich möchte auch die Möglichkeit, Unterabschnitte mit vielen zu einer Beziehung zu Abschnitten usw. zu machen.

So wird dies eine Art Baum wie Struktur sein, wo jeder kleinere Abschnitt seine eigene Zusammenfassung haben wird. (Ich bin im Grunde das Jumpstart Lab Blogger-Projekt, aber Anpassung für mich selbst. http://tutorials.jumpstartlab.com/projects/blogger.html#blogger-2)

Ich konnte die Ansicht für das Stück erfolgreich erstellen und Links zu den Abschnitten. Ich kam zum Teil mit den Kommentaren zum Jumpstart-Tutorial, wo Comments eine Viele-zu-Eins-Beziehung zu Artikeln haben und Kommentare unter dem übergeordneten Artikel angezeigt werden. Ich wollte das gleiche Konzept für Abschnitte/Kapitel verwenden, außer dass ich zu jedem einzelnen Abschnitt verlinken und selbst in einer neuen Ansicht anzeigen möchte.

die Routen für den Abschnitt Modell sagen:

 piece_section GET /pieces/:piece_id/sections/:id(.:format)  sections#show 
     piece_sections GET /pieces/:piece_id/sections(.:format)   sections#index 

Ich habe Probleme in einer neuen Seite einen individuellen Abschnitt angezeigt wird.

Mein erstes Problem ist, dass ich nicht direkt auf die Show Aktion eines einzelnen Abschnitt verknüpfen kann, und ich weiß nicht, warum:

Hier ist der relevante Teil für die Eltern „Piece in show.html.erb ist "oder Buch:

<% @pieces.sections.each do |section| %> 
    <li> 
     <%= link_to section.name, piece_section_path(section), class: 'section_name' %> 
     <!-- this middle part 'piece.name' is the psart we want the link to say, the next part is our route helper.--> 
    </li> 
    <% end %> 
<%= link_to "delete", piece_path(@pieces), method: :delete, data: {confirm: "Really delete the article?"} 

%>

die Eltern "Piece" Controller:

def show 
    @pieces = Piece.find(params[:id]) 
end 

Wenn ich versuche, das ich die folgende Fehlermeldung zu tun:

ActionController::UrlGenerationError in Pieces#show 
Showing /home/david/Documents/Learning/StuddyBuddy/app/views/pieces/show.html.erb where line #9 raised: 
No route matches {:action=>"show", :controller=>"sections", :id=>nil, :piece_id=>#<Section id: 1, name: "xama", broader_context: "hahahah", summary: nil, key_questions_addressed: nil, thoughts: nil, piece_id: 1, created_at: "2016-07-28 10:46:05", updated_at: "2016-07-28 10:46:05">} missing required keys: [:id] 
<%= link_to section.name, piece_section_path(section), class: 'section_name' %> 

Wenn ich auf den Index Aktion des Abschnitte Modell verknüpfen es aber funktioniert, und ich sehe die „Show“ Aktion der Eltern „Piece“ perfekt fein.

Mein zweites Problem ist, wenn ich auf die Ansicht für das Stück bin. Ich versuche, auf einen einzelnen Abschnitt klicken (dh auf diesen Link:.

<%= link_to section.name, piece_sections_path(section), class: 'section_name' %> 

)

Und aus irgendeinem Grund kann ich nicht den Abschnitt anzuzeigen und die Spalten des Section-Modell. Hier

ist der Abschnitt Controller:

class SectionsController < ApplicationController 

def index 
    @pieces = Piece.find(params[:piece_id]) 
    @sections = @pieces.sections.find(params[:section_id]) 
end 

def show 
    @sections = Section.all 
    #@sections = Piece.sections.find(params[:id]) 
    #@sections = @piece.sections.all 
    #@sections.piece_id = @pieces.id 
end 
end 

Hier ist die index.html.erb-Datei für den Abschnitt Modell:

<h1> Yoyo</h1> 
<p>Piece: <%= @pieces.name%></p> 
<p> Section: <%= @sections.name%></p> 
<p> Broader Context: <%= @sections.broader_context %></p> 

Hier sind die Routen.rb-Datei:

Rails.application.routes.draw do 

     root to: 'articles#index' 

     resources :pieces do 
     resources :sections 
     end 
end 

Das Problem, das ich bekommen, ist dies:

ActiveRecord::RecordNotFound in SectionsController#index 
Couldn't find Section without an ID 

Request 
Parameters: 
{"piece_id"=>"1"} 

Was ich nicht verstehe, ist hier, wie ich keinen Zugriff auf den Abschnitt ID haben ?? Wie ist es nur ich habe Zugriff auf die piece_id?

Ich würde die Hilfe wirklich schätzen, da ich für eine Weile auf dieser Sache feststeckt habe.

Antwort

0

Pass Stück ID verlinken auf Helfer als piece_section_path benötigen zwei params

piece_section GET /pieces/:piece_id/sections/:id(.:format)  sections#show 
  • :piece_id
  • :id (section_id)

ändern Link zu:

<%= link_to section.name, piece_section_path(@pieces, section), class: 'section_name' %> 
+0

Danke das war das Problem! Ich schätze es, dass Sie sich die Zeit genommen haben, zu lesen und mir zu antworten! – Kingdavidek