在另一个控制器中创建模型

时间:2013-06-03 20:26:59

标签: ruby-on-rails

我有一个简单的地址簿页面,列出了条目,并在不同型号的标​​签下有一个“添加个人资料”按钮。

假设此页面位于Dashboard#AddressBook。 在这个页面中,我想要添加个人资料按钮来加载个人#New的表单,并允许它在不切换页面的情况下提交。

Individual模型调用像Address这样的子模型,它们具有预设选项,因此需要在控制器中设置变量。

使用AJAX和模态似乎是正确的方法,但是我找不到一个可以让我利用RESTFUL控制器来创建从另一个控制器中的页面创建的模型的工作示例。

如何在不同控制器的页面上创建模型?

2 个答案:

答案 0 :(得分:1)

您可以将表单呈现为部分,并应用选项remote: true。这将转到另一个控制器的create操作,您需要将format.js添加到respond_to块。然后在/ views / profiles目录中创建一个名为create.js.erb的文件。在这里,您将使用jQuery更改视图以呈现刚刚创建的新信息。

答案 1 :(得分:1)

在一个页面上为不同的控制器提供多个表单没有问题:

<%= form_for @address do |f| %>
...
<% end %>

<%= form_for Article.new do |f| %>
...
<% end %>

据我所知,您的问题是,如何为“外部”控制器预先加载“新”对象 我喜欢使用AJAX和延迟加载标签的方法:

<div id="tabs">
  <ul>
    <li><a href="#tabs-1">Own models form</a></li>
    <li><a href="<%= new_article_path %>">new Articel</a></li>
  </ul>
  <div id="tabs-1">
    <%= render "form"
  </div>
</div>

选择第二个标签new Article调用Article#new,您可以在其中初始化该对象并为其呈现表单。
请记住在没有布局的情况下渲染动作的视图。