添加一个模型的新对象,而不用在Rails中转到/ Model /new



假设我有我的主页和一个Post模型。如果我想添加一个新的Post,我去/posts/new并创建一个Post类的新对象。这是一个标准的方法。

例如,我可以在我的主页中加入一个+按钮,它会打开一个小窗口,让我输入标题和内容,并具有与标准方式相同的效果吗?

简短的回答是肯定的。

您必须遵循以下步骤:

  • 添加Post的表单应该在部分
  • 当点击+按钮时显示此部分
  • 因为你使用了局部,动作将被发送到Post#create
  • 现在你只需要考虑重定向。如果你在post#上有重定向,创建
  • 你可以内部请求发送重定向页面到主页,如果这不是ajax的原因

这样你就不需要创建任何新的东西,只需要使用现有的结构,这就是Rails的目的。把所有东西都放在小地方,尽可能多地重复使用。

这不是很清楚你在问什么,但如果我得到它是正确的,你想添加Post从任何地方在你的应用程序。这是非常容易的,你应该要么创建一个模型的实例,并创建一个部分_form.html。Erb和render在你的应用

so inside controller

def index
  @new_post = Post.new
end

里面的观点:

<%= render partial: "form", locals: {page: @new_post} %>

inside _form partial

<%= form_for(page, remote: true) %>
...etc
<% end %>

如果您生成scaffold页面,您将通过生成器获得此部分。在这里,您可以检查如何创建部分。

在你的视图中你可以使用任何你想要的模型…等显示从添加新的。你也可以检查UJS是否用ajax加载页面,这样它就不会刷新(remote: true)整个页面

编辑如果你想使用modal,下面是

的例子。我在这里使用一个引导,但你可以在任何地方应用它。在视图中(例如index)将部分表单包装到bootstrap的标记中,像这样

app/views/页面/index.html.erb

<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#new-page-modal"> Add Page</button>
<div class="modal fade" id='new-page-modal'>
  <div class="modal-content">
   <%= render partial: "form", locals: {page: @new_post} %>
</div>

你可以包括其他部分,并在页脚有按钮,这将触发提交表单,如$('#new-page').submit();你可以把它放在application.js

所以内部视图有一个按钮,将触发modal (data-target="#new-page-model")。我用这个id命名模态,所以如果你在资产管道中包含了bootstrap.js文件,它就会打开。之后,你可以触发表单提交,一旦模态是可见的。

编辑2

这里是如何在页脚设置OK按钮触发提交事件

<div class="modal-footer">
  <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
  <button type="button" class="btn ban-primary" onclick="javascript:$('#new_form').submit();$('#new-page-modal').modal('hide');return false;">Save changes</button>
</div>

所以这里提交按钮,因为它是外部的形式,我触发提交和关闭模态。如果你想处理错误,比如页面标题是必需的,你可能想要一次调整这个…因此,最好使用JS响应远程表单。

对于小窗口,您可以使用Bootstrap Modal。这里有示例代码。

您可以以一种通过AJAX自动发送查询的方式编写表单。您可以使用侦听器编写回调,以便显示成功或执行其他操作。

最新更新