2017-09-18 6 views
0

Je n'arrive pas à comprendre les routes pour les paramètres imbriqués et les contrôleurs correspondants. Plus tard modifier - routes semblaient très bien, mais id_parent est pas enregistréLes attributs imbriqués Rails ne s'affichent pas dans SHOW/ne pas enregistrer l'ID parent

Dans mes itinéraires je

resources :galleries do 
    resources :album 
    end 

montre ensuite dans le contrôleur

def show 
    @albums = Album.find(params[:id]) 
    @photos = @albums.photos.all 

end 

def index 
    @albums = Album.includes(:photos).all 


end 

def new 
    @gallery = Gallery.find(params[:gallery_id]) 
    @album = @gallery.albums.build 
    @photos = @album.photos.build 
end 

def create 
    @gallery = Gallery.find(params[:gallery_id]) 
    @album = @gallery.albums.new(album_params) 

    respond_to do |format| 
    if @album.save 
     params[:photos]['image'].each do |a| 
      @photo = @album.photos.create!(:image => a, :album_id => @album.id) 
     end 
     format.html { redirect_to gallery_path(@gallery.id), notice: 'Post was successfully created.' } 

Les modèles sont comme ça

class Album < ApplicationRecord 
    belongs_to :gallery 
    has_many :photos 
    accepts_nested_attributes_for :photos 
end 

class Gallery < ApplicationRecord 
    has_many :albums 
    accepts_nested_attributes_for :albums 
end 

Dans mon formulaire pour les galeries, je vois très bien toutes les valeurs des colonnes des galeries. Maintenant, je suis en train d'afficher une liste de ses albums comme celui-ci pour commencer, mais rien ne se présente:

<% @gallery.albums.each do |album| %> 
    <%= album.name %> 
    <%= link_to "Destroy", album, method: :delete %> 
<% end %> 

Il se trouve que la parent_id de la galerie n'est pas enregistré lorsque je crée un nouvel album

J'appelle la création d'un album comme celui-ci

<%= link_to 'New Album', new_gallery_album_path(@galleries.id) %>

qui mène à cette url http://localhost:3000/galleries/1/albums

Je ne sais pas exactement ce qui manque à la création définition pour que le gallery_id soit sauvé lorsque j'enregistre l'album

modifier plus tard

Console avant d'appliquer @ suggestion d'Esther

Galerie Charger (1.0ms) SELECT "galeries". * FROM "galeries" O WH "galeries". "Id" = $ 1 LIMIT $ 2 [["id", 1], ["LIMIT", 1]] (0.0ms) BEGIN SQL (0.0ms) INSERT INTO "albums" ("band", "gallery_id", "created_at", "updated_at") VALEURS ($ 1, $ 2, $ 3, $ 4) RETOUR "i d " [[" ban d "," test "], [" gallery_id ", 1], [" created_at "," 2017-09-18 21: 09: 59.805397 "], [" updated_at "," 2017 -09-18 21: 09: 59,805397" ]]
(0.0ms) COMMIT (0.0ms) BEGIN

Et après avoir modifié le contrôleur à utiliser @gallery.albums.create(album_params) au lieu de @gallery.albums.create

Galerie charge (0.0ms) SELECT "galeries". * DE "galeries" O WH "galeries". "Id" = $ 1 LIMIT $ 2 [["id", 1], ["LIMIT", 1]] (0.0ms) COMMENCER SQL (1.0ms) INSERT INTO "albums" ("band", "gallery_id", "created_at", "updated_at") VALEURS ($ 1, $ 2, $ 3, $ 4) RETOUR "id" [["ban d", "new"], ["gallery_id", 1], ["created_at", "2017-09-19 18: 28: 41.093138"], ["updated_at", "2017-09-19 18: 28: 41.093138"] ] (0.0ms) COMMIT (0.0ms) BEGIN (1,0 ms) COMMIT (0.0ms) BEGIN

Répondre

1

Par "parent_id n'est pas enregistré", voulez-vous dire gallery_id n'est pas enregistré à album? Si oui, ma première pensée est que je pense que vous devriez changer cette ligne de code dans votre album créer la méthode de @album = @gallery.albums.new(album_params) à @album = @gallery.albums.create(album_params). Cela crée immédiatement l'album avec les paramètres existants dans album_params qui, je l'espère, comprend le gallery_id avant de procéder à l'ajout des photos à l'album.

Deuxièmement, pouvez-vous s'il vous plaît mettre à jour votre question avec les journaux de la console afin que nous puissions confirmer ce qui est dans le album_params.

+0

Merci @esther Je ne savais pas que créer va comme ça, mais maintenant j'ai appris celui-ci aussi. – Andrea

1

me semble qu'il n'y a pas des dossiers d'album associés à cette galerie.Vous pouvez confirmer en imprimant le compte ou avec une déclaration de débogage.

# Example: 
There are <%= @albums.count %> albums associated with this gallery. 

# For debugging only: 
<%= debug @albums %> 

Vous pouvez également voir ceci dans la console.

@gallery.albums.count 
@gallery.albums.any? 

Et si vous pensez que quelque chose est mal tourné, vous pouvez vérifier les enregistrements dans la base de données directement (exécuter rails db pour vous connecter à votre base de données en utilisant les mêmes informations d'identification) et vous pouvez exécuter SQL:

SELECT COUNT(*) FROM albums WHERE gallery_id = 1; 
+0

Merci @coreyward Je les ai vu être créés avec cette gallery_id mais lors de leur sélection, ils n'apparaissent pas vraiment. Donc, il y a quelque chose d'autre Ifishy dans ma création/chemins et ainsi de suite. Regardera là alors. Merci également pour le formatage. Obtenir le coup de lui aussi – Andrea

+0

Je édite mon message initial avec la nouvelle question – Andrea