1

我的目標來實現一個一對多 - >一個一對多的結構像rails api here描述的:形式在嵌套模型軌道文件上傳

class Document < ActiveRecord::Base 
    has_many :sections 
    has_many :paragraphs, :through => :sections 
end 

class Section < ActiveRecord::Base 
    belongs_to :document 
    has_many :paragraphs 
end 

class Paragraph < ActiveRecord::Base 
    belongs_to :section 
end 

我試圖讓段落文件通過載波上傳文件,如the railscast中關於主題within a nested AJAX form that lets me add and remove sections and paragraphs所述。

由於我只會在完整文檔中查看圖片,因此我試圖將代碼保留在我的文檔控制器中。所以,現在,控制器有:

def show 
    @document = Document.find_by_username(params[:documentname]) 
    @section = @document.sections 
# @paragraph = @section.paragraphs #DONT UNDERSTAND WHY UNCOMMENTING THIS DOESNT WORK. 
    end 

我的兩個文件,部分車型有accepts_nested_attributes_for成立。然而,當我打開一個文檔視圖,如果我取消了@paragraph上面,我得到的建議部分任務是成功的一個錯誤,但是款分配沒有成功缺乏的方法:

NoMethodError in DocumentController#show 
undefined method `paragraph' for #<ActiveRecord::Relation:0x007f9b6409c340> 

如果我把它註釋掉,它似乎加載部分分配罰款。目前,我的章節和段落表格是完全空白的,因爲我無法設置表格,所以也許這是問題的一部分。但我認爲零會給我一個比沒有方法的錯誤,對吧?所以,我懷疑已經有問題了。

所以,我在這裏混淆的主要部分:我如何構建一個由我的文檔控制器控制的窗體來接受任何數據,然後特別是使用載波文件上傳?

如果您對如何更好地構造這個有更好的建議,我會很感激。

另外,有什麼好的方法去調試呢?我似乎缺少一種方法,哪一個在哪裏?

我引用這些,但沒能找到一個解決方案:

更新1

我懷疑問題來自我的不良顯示命令?它不能將正確的部分多重索引到正確的段落?所以,

def show 
    @document = Document.find_by_username(params[:documentname]) 
    @section = @document.sections 
# @paragraph = @section.paragraphs #DONT UNDERSTAND WHY UNCOMMENTING THIS DOESNT WORK. 
    end 

應該更像:

def show 
    @document = Document.find_by_username(params[:documentname]) 
    @section = @document.sections 
    @paragraph = @section.find(params[:section_id]).paragraphs 
    end 

這並不工作,但這樣的事情?有一種方法似乎沒有將這些部分鏈接到各個段落。我與上面得到的錯誤是:

ActiveRecord::RecordNotFound in DocumentController#show 

Couldn't find Section without an ID 

更新2

也許這意味着我應該望遠鏡所有的show命令?即,獲得正確的段落的右側部分將被覆蓋了,像這樣:

def show 
    @document = Document.find_by_username(params[:documentname]) 
    @section = @document.sections 
end 
在區間控制器

文檔控制器

def show 
    @section = Section.find(params[:id]) 
    @paragraph = @section.pictures 
end 

所以,如果那是這種情況,我該如何設置我的嵌套表單?從document#show page中共同創建(1)節,(2)段和(3)欄目式ajax接口中的圖像?

回答

0

無的SO答案我搜索爲我工作,因爲初始密鑰沒有在上傳的同時存在,所以這是不可能的鏈接到它的。

所以,我的解決方案只是不嘗試這種設計。用較少的嵌套來製作不同的表單。

0

你試過了嗎?

@section = @document.sections.build 
    @paragraph = @sections.paragraphs.build 
+0

我覺得這是行不通的。 – Mittenchops 2012-08-08 22:31:33

+0

特別是,這不起作用,因爲將部分鏈接到正確文檔的外鍵document_id ---在生成命令運行之前/之後,外鍵不存在。這意味着外鍵被填充爲零,而不是自動遞增ID。我在這裏的問題有一個更詳細的帖子:http://stackoverflow.com/questions/11875829/assigning-attributes-with-build-not-working-on-creation-cant-assign-foreign-k – Mittenchops 2012-08-09 18:28:30

+0

另外,我認爲第二行必須是「@paragraph = @ section.paragraphs.build」,其中部分是單數。 – Mittenchops 2012-08-10 16:02:56

0

我在另一篇文章中寫了一個巨大的答案,概述瞭如何通過Carrierwave,jQuery File Uploader和嵌套模型在Rails中實現多文件上傳。也許它會有幫助?

Rails 3 + JQuery-File-Upload + Nested Model