1

我的目标是实现一个一对多 -> 一对多的结构,就像这里的 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 会给我一个与没有方法不同的错误,对吧?所以,我怀疑引擎盖下已经有问题了。

所以,我的主要困惑是:如何以及在哪里构造一个由我的文档控制器控制的表单来接受任何数据,然后尤其是使用载波文件上传?

如果您对如何更好地构建它有任何其他建议,我将不胜感激。

另外,调试这个的好方法是什么?我似乎缺少一种方法,哪一种,在哪里?

我已经参考了这些,但无法找到解决方案:

更新 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) 图像?

4

3 回答 3

0

你有没有尝试过 ?

  @section = @document.sections.build
  @paragraph = @sections.paragraphs.build
于 2012-08-06T15:17:17.003 回答
0

我搜索的所有 SO 答案都不适合我,因为在上传时初始密钥不存在,因此无法链接到它。

所以,我的解决方案就是不要尝试这种设计。用更少的嵌套制作不同的表格。

于 2012-12-05T19:52:01.877 回答
0

我在另一篇文章中写了一个巨大的答案,概述了我如何使用 Carrierwave、jQuery File Uploader 和嵌套模型在 Rails 中进行多文件上传。也许它会有所帮助?

Rails 3 + JQuery-文件上传 + 嵌套模型

于 2013-06-18T21:25:47.140 回答