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' ) %>");
这实际上可以工作并渲染部分,但现在我不知道如何发送本地 事件表单 所以我可以制作
<%= form.fields_for :attendants do |form_attendant| %> ...
里面的部分,
任何帮助将不胜感激,我几乎要哭了
【问题讨论】:
【参考方案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_link和add_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 动态渲染局部的主要内容,如果未能解决你的问题,请参考以下文章
如何在 _layout.cshtml 中为不同区域动态渲染局部视图?
如何在 Rails ERB 文件的渲染部分 url 中访问 java 脚本变量?