Rails 动态渲染局部

Posted

技术标签:

【中文标题】Rails 动态渲染局部【英文标题】:Rails render partial dynamically 【发布时间】:2018-04-17 21:10:09 【问题描述】:

我对此有点疯狂,我有一个 Event has_many Attendants 但我无法创建在 Event 表单中动态显示,我有一个 partial 和 Attendant 的 form,这很有效:

<%= form.fields_for :attendants do |form_attendant| %>
  <%= render 'form_attendant', form_attendant: form_attendant %>
<% end %>

对于 1 名服务员,如果我复制粘贴,它适用于 2 名服务员,依此类推..

我想要一个按钮来为我做这件事,我已经阅读并尝试了一个 loooot。

选项 1: 我已经尝试在 js 中附加它:

$("#attendants").append "<%= form.fie ... %>"

但是它只是打印文本并且不会渲染部分,我也尝试过 escape_javascript 没有运气。

我现在正在尝试:

<%= link_to "Agregar", new_attendant_path, remote: true %>

我有这些在attachants/new.js.erb

$('#attendants').append("<%= escape_javascript ( render partial: 'form_attendants' ) %>");

这实际上可以工作并渲染部分,但现在我不知道如何发送本地 事件表单 所以我可以制作 &lt;%= form.fields_for :attendants do |form_attendant| %&gt; ...里面的部分,

任何帮助将不胜感激,我几乎要哭了

【问题讨论】:

【参考方案1】:

试试nested_form_fieldsgem

= form_for @user do |f|
  = f.nested_fields_for :videos do |ff|
    = ff.remove_nested_fields_link
    = ff.text_field :video_title
    ..
  = f.add_nested_fields_link :videos

您可以更改remove_nested_fields_linkadd_nested_fields_link的链接文本,添加类/属性等...

您还可以自定义添加/删除功能,通过覆盖

nested_form_fields.js.coffee 到您的 Rails JavaScript 资产中

更多信息

https://github.com/ncri/nested_form_fields

<%= form_for @users do |f| %>
 <%= f.fields_for :attendants do |form_attendant| %>
   <%= render 'form_attendant', form_attendant: form_attendant %>
 <% end %>
 <%= f.add_nested_fields_link :attendants %>
<% end %>

部分 _form_attendant.html.erb

<%= form_attendant.remove_nested_fields_link %>
<%= form_attendant.text_field :attd_date %>
<%= form_attendant.text_field :attd_time %>

【讨论】:

【参考方案2】:

尝试使用cocoon gem 它会做所有这些事情

【讨论】:

以上是关于Rails 动态渲染局部的主要内容,如果未能解决你的问题,请参考以下文章

Ruby On Rails 部分渲染

如何在 _layout.cshtml 中为不同区域动态渲染局部视图?

将外键传递给 Rails 中的部分渲染

如何在 Rails ERB 文件的渲染部分 url 中访问 java 脚本变量?

Rails 4 使用 ajax、jquery、:remote => true 和 respond_to 渲染部分

定义? Ruby 和 Rails 中的方法