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