我的目标是实现一个一对多 -> 一对多的结构,就像这里的 rails api中描述的那样:
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
我试图让段落类通过carrierwave上传文件,如该主题的railscast中所述,在嵌套的AJAX表单中,我可以添加和删除部分和段落。
由于我将仅在完整文档中查看图片,因此我试图将代码保留在我的 Document 控制器中。所以,现在,控制器有:
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>
如果我将其注释掉,它似乎可以很好地加载部分分配。目前,我的部分和段落表完全空白,因为我无法设置表格,所以这可能是问题的一部分。但我认为 nil 会给我一个与没有方法不同的错误,对吧?所以,我怀疑引擎盖下已经有问题了。
所以,我的主要困惑是:如何以及在哪里构造一个由我的文档控制器控制的表单来接受任何数据,然后尤其是使用载波文件上传?
如果您对如何更好地构建它有任何其他建议,我将不胜感激。
另外,调试这个的好方法是什么?我似乎缺少一种方法,哪一种,在哪里?
我已经参考了这些,但无法找到解决方案:
- http://railscasts.com/episodes/196-nested-model-form-revised
- http://railscasts.com/episodes/253-carrierwave-file-uploads
- 带有嵌套表单的载波上传?
- Rails 3 + JQuery-文件上传 + 嵌套模型
- Rails 3 和嵌套的 jQuery 文件上传模型
更新 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 页面内的 railcasts 风格的 ajax 界面中共同创建 (1) 部分、(2) 段落和 (3) 图像?