这一直困扰着我一段时间。希望有人能帮忙......
我有一个如下的ajax请求(这个完美无缺)。
控制器:
def destroy
@property = Property.find(params[:property_id])
@property_asset = @property.property_assets.find(params[:id])
@property_asset.destroy
property = Property.find(params[:property_id])
@images = property.property_assets.asset_content_type_starts_with('image')
@videos = property.property_assets.asset_content_type_starts_with('video')
@docs = property.property_assets.asset_content_type_starts_with('application')
respond_to do |format|
format.html
format.js
flash[:notice] = "Deleted"
end
end
Destroy.js.haml:
$("#images").html("#{escape_javascript(render 'images')}");
$("#videos").html("#{escape_javascript(render 'videos')}");
$("#docs").html("#{escape_javascript(render 'docs')}");
此方法在调用时会在页面上呈现部分内容,而无需进行刷新。正是我想要的。
在同一页面上,我有一个调用Create方法的文件上传:
def create
@property = Property.find(params[:property_id])
@property_asset = @property.property_assets.create
property = Property.find(params[:property_id])
@images = property.property_assets.asset_content_type_starts_with('image')
@videos = property.property_assets.asset_content_type_starts_with('video')
@docs = property.property_assets.asset_content_type_starts_with('application')
if @property_asset.save
if @property_asset.update(property_asset_params)
respond_to do |format|
format.html
format.js
flash[:notice] = "File added"
end
end
end
end
_create.js.haml与上面的destroy文件相同,但不适用于任何渲染。所以,如果我只是尝试
$("#images").html("#{escape_javascript(render 'images')}");
create方法带我去create.js.haml很好,我知道如果这样,因为我可以输入一个console.log并且它吐出来很好,但添加上面的行和console.log行失败并且它不会渲染。
图像部分是:
- @images.each do |asset|
= form_for [@property, asset], remote: true do |f|
- if asset.id.present?
.row
.large-2.columns
%ul.clearing-thumbs{"data-clearing" => ""}
%li
%a{href: asset.asset.url}
%img{src: asset.asset(:thumb)}
.large-10.columns
.row
.large-12.columns
= f.text_field :description, :placeholder => 'Description', :id => 'test1'
.row
.large-8.columns
%p
= f.check_box :private, :id => 'private'
%label{for: "private"} Private
.large-2.columns
= f.submit 'Update', :class => 'button tiny right round', :disabled => '', :html => { :id => "update#{asset.id}" }, :remote => true
.large-2.columns
%p.right
= link_to 'Delete', [@property, asset], method: :delete, :class => 'button tiny right round alert', :remote => true
如果我需要澄清任何事情,请告诉我。感谢。
日志
这是我刚添加一个简单的console.log的时候。 JS控制台输出正常。一切都好。
(18.8ms) commit transaction
Rendered property_assets/create.js.haml (1.9ms)
Completed 200 OK in 4474ms (Views: 13.4ms | ActiveRecord: 169.5ms)
这是我添加
的时候$("#images").html("#{escape_javascript(render 'images')}");
添加渲染时,log为:
Rendered property_assets/_images.html.haml (19.0ms)
Rendered property_assets/create.js.haml (23.6ms)
Completed 200 OK in 4017ms (Views: 34.7ms | ActiveRecord: 54.1ms)
之前的日志完全相同,我使用paperclip将文件添加到PropertyAsset中,并且我有papertrail跟踪版本。渲染失败时,我需要刷新页面,以便图像显示在列表中。