例子?多个模型嵌套表单和处理,Rails3 + Datamapper

时间:2010-12-22 15:02:36

标签: ruby-on-rails ruby forms ruby-on-rails-3 datamapper

我正在寻找示例,但发现很少有事情,因为一切似乎都倾向于ActiveRecord。我理解了我所看到的基本概念,并且我正在使用Datamapper(dm-accepts_nested_attributes更具体)来做这件事。更多细节可以在这里找到:nested forms for 2 models in rails using dm-accepts_nested_attributes and dm-is-tree

我有一个Post的两个模型表单,包含一些文本和一个Image,就是这样。模型与具有n个图像的Post和属于帖子的图像相关联。

我已经过了很多不同的搜索和博客文章,但是我发现没有项目或示例可以查看,文档很少。我也是一个学习者/初学者/有点密集。我在这里问两个原因:完成我目前的问题,所以未来的提问者有一个值得关注的地方。

使用rails形式的多个模型似乎有点复杂并且不容易实现,或者它确实存在但是我还没想到它。

2 个答案:

答案 0 :(得分:2)

所以,这是我从类似应用程序中提取的一些代码(Rails 3 + DataMapper + dm-accepts_nested_attributes + Haml)。在我的例子中,我有一个医疗实践,它有许多administrators_practices,并且有很多管理员通过administrators_practices。这是模型的相关部分:

has n, :administrators_practices
has n, :administrators, :through => :administrators_practices
accepts_nested_attributes_for :administrators

然后,在我看来,我有这样的事情:

%h1 Practice Setup
%ol
  = form_for @practice do |f|

    %li
      = f.label :name
      = f.text_field :name

    = f.fields_for :administrators do |administrator_builder|

      %li
        = administrator_builder.label :name, "Administrators Name"
        = administrator_builder.text_field :name

      %li
        = administrator_builder.label :email
        = administrator_builder.text_field :email

      %li
        = administrator_builder.label :password
        = administrator_builder.password_field :password

那应该有用。诀窍是使用fields_for并创建一个新的表单生成器。然后,您可以将它视为主要模型的一部分。

如果你遇到困难,可以分开。当我学习将这些东西放在一起时,我会先在模型上工作,然后尝试在那里创建一个嵌套模型。然后,我将构建我的视图,并在我的控制器内运行一个调试器,以确保我在params对象中获得正确的信息。有时我可以玩params足以看到它应该是什么,然后返回并更新我的视图以使表格以正确的方式构建。

答案 1 :(得分:0)

我希望这篇官方指南回答你的问题:
http://guides.rubyonrails.org/form_helpers.html#building-complex-forms