2017-09-18 51 views
0

當我們看到嵌套參數和他們的控制器時,我似乎無法得到路線的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

回答

1

通過「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

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

謝謝@coreyward 我看到他們正在與該gallery_id創建,但選擇後,他們確實沒有出現。那麼在我的創建/路徑中還有別的Ifishy等等。那麼看看那裏。 也感謝格式。獲取它的竅門 – Andrea

+0

我正在編輯我的初始文章與新問題 – Andrea