0

我有 2 个不同的模型,称为ParentChild

我有一个名为的页面,上面Houselink_to两种形式:

页面/house.html.erb

link_to "Parent", new_parent_path

link_to "Child", new_child_path

当您在页面上开始时,它是空的,没有表格。

我希望能够单击该new_parent链接并在同一页面上生成父表单,但是如果单击该new_child链接,我想删除父表单并通过 AJAX 将其替换为子表单。我该怎么做?

4

2 回答 2

4

我认为没有 Ajax 但使用 css 会更容易。在页面中生成 2 个表单(例如使用部分表单),然后将其放在隐藏的 div(css 样式:)中display: none,并使用带有链接的 javascript 来显示/隐藏包含要显示的表单的 div(使用 JQuery show并隐藏效果

于 2012-06-15T20:12:51.590 回答
0

这实际上很容易创建。这个问题这个问题帮助我更好地理解了 AJAX 和 jquery。

让我们以父级为例:

我将其format.js放入控制器中以执行new操作:

ParentsController

def new
 @parent = Parent.new

 respond_to do |format|
  format.js
 end
end

我删除 myparents/new.html.erb作为个人选择并将其替换new.js.erb为将由 my 调用的"Parent" link_to

# parents/new.js.erb

$("#generate-form").html("<%= escape_javascript(render(:partial => 'parents/form', locals: { parent: @parent })) %>");

remote => true然后在用于 AJAX的部分中创建一个 Parent 表单。

# parents/_form.html.erb

<%= form_for(@parent, :remote => true) do |f| %>
    <%= f.input :full_name %>    
  <%= f.button :submit, 'Done' %>
<% end %>

然后我有一页包含两种形式。

PagesController

def index

  respond_to do |format|
    format.html
  end
end

然后是该页面上针对父母和孩子的链接。

#pages/index.html.erb

<li><%= link_to "Parent", new_parent_path, :remote => true %></li>
<li><%= link_to "Child", new_child_path, :remote => true %></li>

<div id="generate-form">
</div>          

我的remote => true链接和表单将响应我的行为js格式new和我div id="generate-form"作为老板的行为,将任一表单部分放入其中。这会根据您单击的链接自动替换另一个,从而动态更改表单。

注意:子模型的代码是相同的(除了表单字段)。只需替换模型名称(父到子)。

于 2012-06-18T02:55:16.297 回答