【问题标题】:Examples? Multiple model nested forms and processing, Rails3+Datamapper例子?多模型嵌套表单及处理,Rails3+Datamapper
【发布时间】:2010-12-22 15:02:36
【问题描述】:
我正在寻找示例,但几乎没有发现什么可以继续,因为一切似乎都倾向于 ActiveRecord。我了解我所见的基本概念,并且我正在使用 Datamapper 进行此操作(更具体的是 dm-accepts_nested_attributes)。更多细节可以在这里找到:nested forms for 2 models in rails using dm-accepts_nested_attributes and dm-is-tree
我有一个包含一些文本和一个图像的帖子的两个模型表单,就是这样。这些模型与具有 n 个图像的帖子和属于帖子的图像相关联。
我已经浏览过很多不同的搜索和博客文章,但没有找到可以查看的项目或示例,而且文档很少。我也是一个学习者/初学者/有点密集。我在这里问有两个原因:解决我当前的问题,以便未来的提问者有一个地方可以查看。
在 Rails 表单中处理多个模型似乎有些复杂且不容易完成,或者确实如此,但我还没有弄清楚。
【问题讨论】:
标签:
ruby-on-rails
ruby
forms
ruby-on-rails-3
datamapper
【解决方案1】:
所以,这是我从类似应用程序(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 对象中获得正确的信息。有时我可以使用足够多的参数来查看它应该是什么,然后返回并更新我的视图以正确构建表单。