ajax请求有以下选择标记:
= form_for owner, url: change_status_admin_owner_path(owner), remote: true do |f|
.row
= f.select(:status_id, options_from_collection_for_select(Status.all, :id, :description,
owner[:status_id]), {}, { data: { remote: true, url: change_status_admin_owner_path(owner), method: :patch } })
控制器中的动作:
def change_status
Owner.find(params[:id]).update!(status: Status.find(params[:owner])
end
并且change_status.js.erb:
$("html").remove();
这是JS的例子,不是真正的任务,但它不起作用 - 而不是我的JS代码:
<div class='content'>
<div class='container'>
$("html").remove();
</div>
</div>
即。 Rails将我的JS代码呈现为文本!我的代码有什么问题?谢谢!
答案 0 :(得分:2)
如果您想要将响应设置为JS,请尝试添加respond_to块,如下所示:
def change_status
Owner.find(params[:id]).update!(status: Status.find(params[:owner])
respond_to do |format|
format.js
end
end
这将在您的视图文件夹中查找change_status.js.erb
文件。
答案 1 :(得分:1)
继续我的评论&amp; manu29.d
的答案,您最好使用respond_to
块:
def change_status
...
respond_to do |format|
format.js #-> looks for change_status.js.erb
end
end
-
但是,这并不能解释为什么您的响应呈现为HTML(而不是JS)
我猜测,由于您的应用程序未按text/javascript
mime type处理响应,因此Rails将寻找任何格式的视图change_status
在您的文件夹中(IE可以是.html.erb
或.js.erb
)
因为它找到了一个叫.js.erb
的人,我猜它会被处理为静态HTML(因为erb
只是一个预处理器)。要解决此问题,respond_to
块基本上会设置mime类型,允许浏览器消化JS