当谈到嵌套参数及其控制器时,我似乎无法掌握路由。稍后编辑 - 路线似乎很好,但不保存parent_id
在我的路线中我有
resources :galleries do
resources :album
end
然后在控制器中显示
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.' }
模型就像这样
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
在我的画廊形式中,我看到所有画廊列值都很好。 现在我试图为初学者显示这样的专辑列表,但没有显示出来:
<% @gallery.albums.each do |album| %>
<%= album.name %>
<%= link_to "Destroy", album, method: :delete %>
<% end %>
事实证明,当我创建新专辑
时,未保存图库的parent_id我将这张专辑称为
<%= link_to 'New Album', new_gallery_album_path(@galleries.id) %>
导致此网址http://localhost:3000/galleries/1/albums
我不确定创建定义中缺少什么,以便在保存相册时保存gallery_id
稍后编辑
在应用@Esther的建议之前的控制台
图库加载(1.0ms)选择“画廊”。* FROM“画廊”WHERE “画廊”。“id”= $ 1 LIMIT $ 2 [[“id”,1],[“LIMIT”,1]](0.0ms) BEGIN SQL(0.0ms)INSERT INTO“albums”(“band”,“gallery_id”, “created_at”,“updated_at”)VALUES($ 1,$ 2,$ 3,$ 4)返回“id” [[“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
修改控制器后使用@gallery.albums.create(album_params)
代替@gallery.albums.create
Gallery Load(0.0ms)SELECT“galleries”。* FROM“galleries”WHERE “画廊”。“id”= $ 1 LIMIT $ 2 [[“id”,1],[“LIMIT”,1]] (0.0ms)BEGIN SQL(1.0ms)INSERT INTO“albums”(“band”,“gallery_id”,“created_at”,“updated_at”)VALUES($ 1,$ 2,$ 3,$ 4)返回“id” [[“禁止 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.0ms)COMMIT (0.0ms)BEGIN
答案 0 :(得分:1)
在我看来,没有与此图库相关联的任何相册记录。您可以通过打印计数或使用调试语句来确认。
# Example:
There are <%= @albums.count %> albums associated with this gallery.
# For debugging only:
<%= debug @albums %>
您也可以在控制台中看到这一点。
@gallery.albums.count
@gallery.albums.any?
如果您认为某些内容出错,您可以直接在数据库中检查记录(运行rails db
以使用相同的凭据连接到您的数据库)然后您可以执行SQL:
SELECT COUNT(*) FROM albums WHERE gallery_id = 1;
答案 1 :(得分:1)
“父节点未保存”,您的意思是gallery_id
未保存到album
吗?
如果是,我的第一个想法是,我认为您应该将相册创建方法中的这一行代码从@album = @gallery.albums.new(album_params)
更改为@album = @gallery.albums.create(album_params)
。这会立即创建包含album_params
中现有参数的相册,我希望在您继续将照片添加到相册之前包含gallery_id
。
其次,您能否使用控制台中的日志更新您的问题,以便我们确认album_params
中的内容。