1

我在http://guides.rubyonrails.org/association_basics.html#the-has_one-through-association上找到了这段代码:

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

这正是我想要完成的工作,但我对 Rails 还是很陌生,想知道是否有人可以向我展示一个表单样本和所需的控制器,以便能够为此设置创建记录?

我能够创建第一部分(文档有很多部分),但我一直在弄清楚如何实现部分有很多段落以及如何能够在三者之间进行引用。我已经搜索了上面的例子的高低,并且非常感谢新的、创建、更新操作和相应表单的示例代码。

提前非常感谢!

更新:非常感谢您对此的帮助,并感谢您的快速回复。也许我需要澄清一点。

我有我的 3 个模型(用户、出版物、问题),它们在各自的视图和控制器中是分开的。目标是有一个控制面板,登录用户可以在其中单击链接:

a) 添加/编辑/删除与个人用户相关的出版物

b) 添加/编辑/删除与个别出版物相关的问题

因此,我也有 3 个单独的表格(用户、出版物和问题)。

在我的 Publications_controller 中,我设法:

@publication = current_user.publications.build(params[:publication])

它将用户和出版物链接在一起,并在出版物模型中填充正确的 user_id 字段(未在 attr_accessible 中列出),这样效果很好。

现在我的挑战是在出版物中添加问题,这是我有点不足的地方。我有一个菜单,我可以在其中添加问题,但我不希望表单中的 publication_id 字段,并且模型中的 attr_accessible 也没有它。我想通过具有所选出版物的用户创建一个问题。

如果我不能很好地解释它,我很抱歉,这对我来说仍然很新,可能也是我在搜索正确术语时遇到困难的原因。

4

1 回答 1

11

希望对你有帮助:

楷模:

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

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

class Paragraph < ActiveRecord::Base
    belongs_to :section
end

控制器:

class DocumentsController < ApplicationController

    def new
        @document = Document.new
        @document.sections.build
        @document.paragraphs.build
    end
end

意见:

form_for @document do |f|

     ----document fields----------

     f.fields_for :sections do |s|
        ----sections fields----------
     end

     f.fields_for :paragraphs do |s|
          ----paragraphs fields----------
     end

end

谢谢

于 2013-06-08T13:14:03.770 回答