我有Post的嵌套元素,根据a:cat变量,它们也有不同的嵌套形式(本例中的文本)。
要创建文本我正在使用带有变量(cat = 1)的post方法create_element。我想调用一个AJAX方法将新文本呈现到我的帖子中。
我的问题:我不知道如何将直接创建的文本nested_form调用到我的AJAX方法中。
我的代码:
发表表格(帖子/新):
<%= simple_form_for @post do |f| %>
<div class="elements">
<%= f.fields_for :elements do |element| %>
<%= render 'posts/element_field', f: element %>
<% end %>
</div>
<div class="btn_add_element_area">
<a href="/posts/<%=@post.id%>/create_element?cat=1" data-method="patch" data-remote="true">
<i class="fa fa-font"></i>
</a>
</div>
<%= f.submit "Publish", class: "btn" %>
<% end %>
发布表单(posts / _element_field):
<div class="element_form" id="element_form<%= f.object.id %>">
<div class="undisplay">
<%= f.number_field :cat %>
</div>
<%- if f.object.cat == 1 %>
<%= f.fields_for :post_texts do |text| %>
<%= render 'posts/elements/text_field', f: text %>
<% end %>
<% end %>
</div>
发布表单(posts / _text_field):
<%= f.text_area :content %>
发布控制器(create_element):
def create_element
if params[:cat] == "1"
@element = Element.create(post: @post, cat: 1)
Text.create(element: @element)
end
respond_to do |format|
format.js {render 'elements/create'}
end
end
AJAX方法(elements / create):
$('.elements').append("<%= j render partial: 'posts/element_field', locals: {f: @element} %>");
错误=未定义的方法`对象'
问题是在AJAX文件中我调用为我的f变量创建的@element而不是调用这个@element的形式。
我也为AJAX方法尝试了类似的东西,但仍然无效:
<% form_for(@element) do |elm| %>
$('.elements').append("<%= j render partial: 'posts/element_field', locals: {f: elm} %>");
<% end %>
错误=未定义的方法`element_path'
或
<%= simple_form_for(@post) do |p| %>
<%= p.fields_for :elements, @element do |elm| %>
$('.elements').append("<%= j render partial: 'posts/element_field', locals: {f: elm} %>");
<% end %>
<% end %>
没有错误但没有任何反应
如果你有什么想法可以解决这个问题,我真的很感激!
PS:欢迎改进问题标题的想法!!