Rails嵌套属性未显示在SHOW /不保存父ID中

时间:2017-09-18 19:43:21

标签: ruby-on-rails controller nested-forms

当谈到嵌套参数及其控制器时,我似乎无法掌握路由。稍后编辑 - 路线似乎很好,但不保存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

2 个答案:

答案 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中的内容。