我的目標來實現一個一對多 - >一個一對多的結構像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>
如果我把它註釋掉,它似乎加載部分分配罰款。目前,我的章節和段落表格是完全空白的,因爲我無法設置表格,所以也許這是問題的一部分。但我認爲零會給我一個比沒有方法的錯誤,對吧?所以,我懷疑已經有問題了。
所以,我在這裏混淆的主要部分:我如何構建一個由我的文檔控制器控制的窗體來接受任何數據,然後特別是使用載波文件上傳?
如果您對如何更好地構造這個有更好的建議,我會很感激。
另外,有什麼好的方法去調試呢?我似乎缺少一種方法,哪一個在哪裏?
我引用這些,但沒能找到一個解決方案:
- http://railscasts.com/episodes/196-nested-model-form-revised
- http://railscasts.com/episodes/253-carrierwave-file-uploads
- Carrierwave upload with nested forms?
- Rails 3 + JQuery-File-Upload + Nested Model
- Rails 3 and a Nested jQuery File Upload Model
更新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接口中的圖像?
我覺得這是行不通的。 – Mittenchops 2012-08-08 22:31:33
特別是,這不起作用,因爲將部分鏈接到正確文檔的外鍵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
另外,我認爲第二行必須是「@paragraph = @ section.paragraphs.build」,其中部分是單數。 – Mittenchops 2012-08-10 16:02:56