我对控制器动作进行了非常简单的ajax调用,该动作应该将表单呈现给指定的div。除了没有任何渲染到div,而控制器,服务器和控制台中的所有内容都表明它应该工作。我已经检查并仔细检查了div的名称是否相同,我已经重命名了以查看是否存在冲突,我甚至在同一页面上有一些东西可以执行我想要的操作 - 但它就行不通
在Chrome中进一步检查时,会出现“js.erb”字样。没有得到适当的评估。 当渲染文件时,它应该输出我的js erb文件的内容(在其他情况下可以正常工作),除了它输出整个布局和部分封装。
我已经在此处发出警告以获得良好的衡量标准,这不会被解雇(它会在项目中与其他js控制器一起测试)。
.........
<div class='container'>
<div class='row'>
<section class='col-lg-12'>
<div class='panel panel-default'>
<div class='panel-body'>
alert('test');
$("#membershipForm").html("<form novalidate=\"novalidate\"
这是控制器动作
def new
@membership = Membership.new(membershipable_type: params[:membershipable_type],
membershipable_id: params[:membershipable_id])
respond_to do |format|
format.js { render 'new' }
end
end
这里是new.js.erb
alert('test');
$("#membershipForm").html("<%= j render('memberships/partials/form') %>");
这很奇怪,我真的不明白发生了什么。
答案 0 :(得分:1)
您需要在layout: false
方法中设置render
。像这样render(template: 'foo/bar', layout: false)
此外,我认为通过.js.erb
实现对其他开发人员来说并不是一个好方法。我建议你像我下面描述的那样实现。
删除new.js.erb
并将其添加到new.erb
:
<%= javascript_tag do %>
alert('test');
$("#membershipForm").html(<%= render_to_string(template: 'members/partials/form', layout: false) %>);
<% end %>
答案 1 :(得分:0)
问题无疑与您的format.js { render "new" }
有关 - 您可以通过以下方式做得更好:
#app/controllers/memberships_controller.rb
class MembershipsController < ApplicationController
respond_to :js, :html
def new
@membership = Membership.new membershipable_type: params[:membershipable_type], membershipable_id: params[:membershipable_id]
end
def create
@membership = Membership.new membership_params
@membership.save
end
private
def membership_params
params.require(:membership).permit(:membershipable_type, :membershipable_id)
end
end
以上内容将调用相应操作的.js.erb
个文件:
#app/views/memberships/new.js.erb
$("#membershipForm").html("<%= j render 'memberships/partials/form' %>");
这应该有用。