2016-12-16 4 views
0

Je suis en train de créer un site web où l'on peut lire plusieurs mangas. La structure est la suivante (et comme demandé par les personnes pour lesquelles je travaille): Tout d'abord, vous avez tous les titres de manga (disons, Naruto, One Piece, One Punch, etc.). Ensuite, lorsque vous cliquez sur l'un des mangas, vous accédez aux chapitres liés au manga. Ensuite, vous avez enfin accès aux scans du manga. Ce qui me dérange, c'est que j'ai utilisé deux échafaudages différents (un pour les mangas et un autre pour les chapitres), mais je ne sais pas comment le dire à Rails, lorsqu'un membre du personnel veut ajouter un chapitre à un manga , quel manga le chapitre est lié à.Comment puis-je transmettre des données d'un échafaud à un autre?

j'ai décidé de créer un lien vers la création de chapitres (chapters#new) à partir du titre du manga (mangas#show), et de passer id à l'URL de création du chapitre du manga comme suit:

routes.rb

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

manga # montrent

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

(Depuis que je l'utilise FriendlyId, ce fut la seule méthode que je pouvais trouver pour obtenir le vrai id au lieu de la limace)

Jusqu'à présent, quand je suis à l'action chapters#new, mon URL se présente comme suit: http://localhost:3000/chapters/new/1 , 1 étant le manga id qui a transmis avec le lien.

Ensuite, dans le contrôleur, j'isole l'id comme suit:

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 

Cependant, lors de la présentation du formulaire, je reçois l'erreur suivante:

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

Je crois que c'est parce que je J'ai donné au contrôleur un numéro pendant qu'il attendait un objet entier, mais j'ai pensé que c'était suffisant, et maintenant je n'ai plus d'idée.

Quelqu'un a une idée?

Répondre

0

Je suggère d'étendre votre site imbriqué, de cette façon vous avez des opérations CRUD pour toutes les choses importantes. Par exemple, vous auriez un modèle Manga, un modèle de chapitre et un modèle de numérisation. Le modèle Manga stocke les mangas individuels et vous permet de créer, mettre à jour, supprimer, etc. chaque manga, Le modèle de chapitre stocke les différents chapitres de votre manga. Le modèle de numérisation stocke les scans individuels de votre chapitre.

Vous n'avez pas à briser vos liens de construction de tête. Rails fait tout pour vous. Il vous suffit de spécifier les ressources (Contrôleurs) comme imbriquées comme ceci dans vos routes.rb

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

Ceci définit toutes les routes, vous devez avoir des opérations CRUD sur toutes vos ressources et les liens sont organisés automatiquement comme ceci:

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

Lorsque vous créez un nouveau Manga:

yourdomain.com/manga/new 

Lorsque vous créez un nouveau chapitre dans votre manga:

yourdomain.com/manga/manga_number/chapter/new 

Lorsque vous créez un nouveau scan dans votre chapitre:

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

Tout cela grâce à l'imbrication de vos ressources dans votre routeur.

+0

Bonjour, désolé de répondre à cette question en retard, mais je n'ai pas pu travailler sur le code pendant quelques jours, j'ai juste une question: tout s'est bien passé (un tweak ou deux étaient nécessaires), mais maintenant je suis bloqué par le formulaire de création: il n'accepte pas "chapter" ni "@chapter" comme argument, j'ai donc essayé avec quelques choses jusqu'à ce que "new_manga_chapters_path'" fasse apparaître le formulaire. Formulaire .. Que dois-je mettre comme argument pour 'form_for'? – Jaeger

+0

Lorsque vous créez de nouvelles entrées qui sont imbriquées, vous devrez indiquer leur chemin correct comme vous l'avez découvert avec" new_manga_chapters_path "Dans ce cas, vous devrez définir Une variable d'instance dans le contrôleur de votre chapitre et référence cette variable d'instance dans votre formulaire.Rails s'occupe du reste.Je mettrai à jour ma réponse plus tard car vous devrez mettre à jour votre modèle ainsi que lorsque vous créez un Cha Il est stocké comme un chapitre d'un manga et un balayage d'un chapitre. –