Ruby on Rails - 发出 AJAX 请求并渲染结果模型的一部分
Ruby on Rails - Make an AJAX request and render the partial of the resulting model
我到处寻找我的疑问的答案,但 none 对我有用(我可能做错了什么)。
我对 Rails 上的 Ruby/Ruby 很陌生,所以我不太了解它是如何工作的。
我的申请中有两个模型
Attribute name:string
和;
Product name:string
.
我也有两个控制器:
attributes_controller
和;
products_controller
.
我也有以下看法../app/views/product_models/new.html.erb
。在此视图中,我希望能够创建一个属性并在之后立即将其显示给用户(使用 AJAX)
<div id="attributes_list">
<%= render :partial => "attributes/attribute", :collection => @attributes, :as => :attribute %>
</div>
<div id="new_attribute">
<strong>Adicionar novo atributo</strong> <br />
Nome: <input type="text" class="name"><br />
<span class="create_button">Criar</span>
</div>
对于这种情况,我有以下jquery(在../app/assets/javascripts/application.js
中):
$(document).ready(function () {
var new_attribute_div = $(document).find('#new_attribute')
new_attribute_div.on('click', '.create_button', function () {
// alert('funfou');
$.ajax({
url: '/attributes',
type: 'POST',
dataType: "script",
data: {
name: new_attribute_div.find(".name").val()
},
success: function (data) {
$(document)
.find('#attributes_list')
.append("<%= j render @attribute %>");
new_attribute_div.find(".name").val("");
},
error: function (data) {
alert("error:" + data)
}
});
});
});
我的attributes_controller也是这样
class AttributesController < ApplicationController
def create
@attribute = Attribute.new(attribute_params)
@attribute.save
respond_to do |format|
format.html { redirect_to @attribute }
format.js
format.json
end
end
end
private
def attribute_params
params.permit(:name)
end
我遇到的问题是,当执行 jquery 的以下行时
.append("<%= j render @attribute %>");
rails 不是渲染属性的一部分,而是渲染字符串本身 (<%= j render @attribute %>)
我做错了什么?
如何呈现从控制器返回的@attribute?
奥古斯托,
您应该在 jquery 内包含代码的 Rails 部分 #{ }
所以应该是:
.append("#{<%= j render @attribute %>}");
您不能在资产中使用 rails 片段或变量
"<%= j render @attribute %>"
要解决此问题,您必须在 attributies/create.js.erb
中包含 .js.erb
文件
在文件中传递你的渲染属性
$(document)
.find('#attributes_list')
.append("<%= j render @attribute %>"
记住,只有当请求以 JS 形式出现时才会触发。
我到处寻找我的疑问的答案,但 none 对我有用(我可能做错了什么)。
我对 Rails 上的 Ruby/Ruby 很陌生,所以我不太了解它是如何工作的。
我的申请中有两个模型
Attribute name:string
和;Product name:string
.
我也有两个控制器:
attributes_controller
和;products_controller
.
我也有以下看法../app/views/product_models/new.html.erb
。在此视图中,我希望能够创建一个属性并在之后立即将其显示给用户(使用 AJAX)
<div id="attributes_list">
<%= render :partial => "attributes/attribute", :collection => @attributes, :as => :attribute %>
</div>
<div id="new_attribute">
<strong>Adicionar novo atributo</strong> <br />
Nome: <input type="text" class="name"><br />
<span class="create_button">Criar</span>
</div>
对于这种情况,我有以下jquery(在../app/assets/javascripts/application.js
中):
$(document).ready(function () {
var new_attribute_div = $(document).find('#new_attribute')
new_attribute_div.on('click', '.create_button', function () {
// alert('funfou');
$.ajax({
url: '/attributes',
type: 'POST',
dataType: "script",
data: {
name: new_attribute_div.find(".name").val()
},
success: function (data) {
$(document)
.find('#attributes_list')
.append("<%= j render @attribute %>");
new_attribute_div.find(".name").val("");
},
error: function (data) {
alert("error:" + data)
}
});
});
});
我的attributes_controller也是这样
class AttributesController < ApplicationController
def create
@attribute = Attribute.new(attribute_params)
@attribute.save
respond_to do |format|
format.html { redirect_to @attribute }
format.js
format.json
end
end
end
private
def attribute_params
params.permit(:name)
end
我遇到的问题是,当执行 jquery 的以下行时
.append("<%= j render @attribute %>");
rails 不是渲染属性的一部分,而是渲染字符串本身 (<%= j render @attribute %>)
我做错了什么? 如何呈现从控制器返回的@attribute?
奥古斯托, 您应该在 jquery 内包含代码的 Rails 部分 #{ } 所以应该是:
.append("#{<%= j render @attribute %>}");
您不能在资产中使用 rails 片段或变量
"<%= j render @attribute %>"
要解决此问题,您必须在 attributies/create.js.erb
.js.erb
文件
在文件中传递你的渲染属性
$(document)
.find('#attributes_list')
.append("<%= j render @attribute %>"
记住,只有当请求以 JS 形式出现时才会触发。