Rails嵌套的属性不显示在SHOW /不保存父母的ID

问题描述:

当我们看到嵌套参数和他们的控制器时,我似乎无法得到路线的hang hang。后来编辑 - 航线看起来很好,但PARENT_ID不保存Rails嵌套的属性不显示在SHOW /不保存父母的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)SELECT“galleries”* FROM“galleries”WHERE “galleries”。“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)RETURNING“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

以及修改所述控制器后使用@gallery.albums.create(album_params)代替@gallery.albums.create

廊负荷( (0.0ms)SELECT“galleries”。* FROM“galleries”WHERE “galleries”。“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)RETURNING“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.0ms的)COMMIT (0.0ms)BEGIN

通过“parent_id不保存”,你的意思是gallery_id没有被保存到album

如果是的话,我的第一个想法是我认为你应该将你的相册创建方法中的这一行代码从@album = @gallery.albums.new(album_params)更改为@album = @gallery.albums.create(album_params)。这会立即创建带有album_params中现有参数的相册,我希望在您继续将相片添加到相册之前,其中包含gallery_id。第二,你能否用控台上的日志更新你的问题,以便我们确认album_params中的内容。

+0

谢谢@esther 不知道创建就是这样,但现在我也学到了这一点。 – Andrea

看起来对我来说有没有与此相关的画廊任何专辑记录。您可以通过打印计数或使用调试语句进行确认。

# 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; 
+0

谢谢@coreyward 我看到他们正在与该gallery_id创建,但选择后,他们确实没有出现。那么在我的创建/路径中还有别的Ifishy等等。那么看看那里。 也感谢格式。获取它的窍门 – Andrea

+0

我正在编辑我的初始文章与新问题 – Andrea