2016-12-08 63 views
0

我正在嘗試創建一個可以在線閱讀的雜誌。爲此,我爲雜誌本身創建了一個腳手架,然後爲第一個頁面嵌套了另一個腳手架。之後,我創建了一個系統,允許從雜誌腳手架進行多重上傳,這將自動在頁面的腳手架內爲同一時間上傳的每張圖片創建一個新條目(一張圖片=一頁)。控制器嵌套元素的增量問題

經過一番嘗試,我認爲設置ID爲頁碼不是很聰明,因爲它會自動增加,不會再從1開始。因此,我在名爲「page_number」的頁腳架內創建了一個新列,當多上傳表單中的第一個圖像上傳/添加到頁腳手架時,該列將被設置爲1,然後下一頁將獲取此數字的增量。

反正這裏是我的控制器(它的相關部分)

class MagazinesController < ApplicationController 
#Some code.. 

    def create 
    @magazine = Magazine.new(magazine_params) 

    if @magazine.save 
     if params[:images] #If there are images loaded in the multi upload form 
     params[:images].each { |image, index| #for each of them... 
      if index == 0 
      @magazine.pages.page_number = 1 #Set the first one's page_number to 1 
      else 
      @magazine.pages.page_number += 1 #Set its incrementation after that 
      end 
      #Save each of the images as a new image from the :image scaffold 
      @magazine.pages.create(image: image) 
     } 
     end 
     redirect_to @magazine, notice: 'Magazine créé' 
    else 
     render :new 
    end 
    end 

#Some code.. 

end 

我的問題是,即使重新啓動服務器,一旦遷移完成後,當我嘗試上傳新的雜誌後,我得到以下錯誤:undefined method 'page_number' for #<ActiveRecord::Associations::CollectionProxy []>

當我在網上查找時,發現有兩種方法可以通過模型和SQL請求以及通過控制器和此方法遞增事物,這更符合我的需求。我不知道如何解決這個問題,因爲我需要在另一個嵌套元素中指定一些東西,並且一切都很順利,沒有任何問題,並且因爲RubyMine在沒有問題的情況下在「@ magazine.pages」之後添加一個點之後建議這個「page_number」 。

我忘了什麼?

預先感謝您

回答

1

我將重寫代碼一點點:

def create 
    @magazine = Magazine.new(magazine_params) 

    if @magazine.save 
    (params[:images] || []).each_with_index do |image, index| #for each of them... 
     #Save each of the images as a new image from the :image scaffold 
     @magazine.pages.create(image: image, page_number: index + 1) 
    end 
    redirect_to @magazine, notice: 'Magazine créé' 
    else 
    render :new 
    end 
end 

你得到的錯誤是因爲你想分配給pages關係page_number,這是真的,它不存在。 @magazine .pages是一個不是實例的關係,因此該關係沒有定義(page_number)方法。

我所做的是,我只是將page_number分配給在@magazine.pages.create...行中創建的page實例,並且索引將與循環的索引+1對齊。

(params[:images] || []).each是隻是爲了避免具有if以檢查images PARAM進來的請求時,如果不來,環路將不執行,因爲該陣列將是空的(|| [])。

+0

非常感謝您的明確回答!我現在明白了爲什麼我遇到了這個麻煩,但是,我已經重寫了我的代碼,但是現在我有以下錯誤:未定義方法+'for nil:NilClass',看起來Rails仍然沒有了解「page_number」是什麼.. – Jaeger

+1

對不起,'.each'應該是'.each_with_index do | image,index |'。讓我編輯答案。 – fanta

+1

非常感謝你,我太累了,不知道它是'each_with_index',無論如何,它工作順利,非常感謝你,我不認爲我會自己找到這個解決方案! – Jaeger