如何从添加人员表单中向人员添加地址?

时间:2011-09-29 08:16:59

标签: jquery ruby-on-rails-3

我有一个(rails 3 / jquery)应用程序,用户遇到一个新的人员表单。在表单中,他可以做的一件事就是在构建人员时添加地址。我希望添加和显示地址(通过Ajax或在页面本身上),但只有在保存人员时才应提交地址(如果用户取消创建人员,则也不应保存地址) )。人员表单包含人名的字段和添加地址的按钮。点击添加地址后,会弹出一个对话框输入地址。随着每个地址的添加,它将与表单一起显示。

最好的方法是什么?我目前在使用jquery输入地址的人员中填充div:     <%= form_tag ... do%>     <%= text_field_tag:person_name%>     <%= link_to'添加地址',nil,:id => 'add_address_link',:remote =>真%GT;
                    <%= submit_tag%>     <%端%GT;          $( '#add_address_link')。点击(函数(){        $( '#地址')追加(...)。     });
我可以处理提交,并将地址元素读入一系列隐藏字段(此处未显示),或使用ajax而不是直接jquery点击处理程序,并填充erb中的隐藏字段。不确定实现这一目标的最佳方法是什么?

由于 阿南德

3 个答案:

答案 0 :(得分:1)

您的数据库是什么样的?如果人员和地址是单独的表,我建议使用Ryanb的nested_form gem。 gem使用jQuery,可以非常轻松快速地添加动态嵌套表单。 gem支持has_many关系,因此您可以允许一个人拥有多个地址。

https://github.com/ryanb/nested_form

答案 1 :(得分:1)

Rails 3支持使用fields_for表单助手的嵌套表单。查看http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object

你应该在你的问题中显示模型关联,但我认为你有:

class Person < ActiveRecord::Base
  has_many :addresses
end

class Address < ActiveRecord::Base
  belongs_to :person
end

现在,您想为每个地址动态添加重复字段。虽然我不认为ryanb的nested_form gem是必要的,但你应该看看他的railscast http://railscasts.com/episodes/197-nested-model-form-part-2

railscast演示了如何使用fields_for

向表中动态添加行,其中每行都是嵌套表单

github上有一个配套项目,其中包含执行此操作的代码。

最后,您希望调整ryanb的代码以使用隐藏字段而不是表行。我实际上正在做这件事。

另一种选择是重组表单工作流程。我有另一个用例,听起来更像你所描述的内容,对我来说最简单的事情是,对Person使用相同的_form partial,只显示子对象(在你的情况下为Address)。当然,在“新”动作中,没有(除非你在Person回调中做了一些事情)。然后,在Person“create”操作上,而不是重定向到Person索引页面(典型),重定向回edit_person_path。然后,您可以使用remote / ajax向该人添加地址,因为此人将存在。

答案 2 :(得分:0)

我假设你有一个单独的模型 - 地址。在这种情况下,只需将用于创建新用户的参数传递给地址控制器,并在地址控制器的create操作中,仅当具有参数的人员存在时调用@address.save(如果是人员) .find很成功)。