【发布时间】:2016-05-16 21:47:01
【问题描述】:
我正在构建一个 Rails 应用程序,其中包含一个带有标记的地图(在应用程序中也称为“绘图”)。单击标记/绘图时,标记旁边会出现一个信息框。我正在尝试添加一个功能,其中单击信息框会在地图旁边呈现部分内容,其中包含与该特定图相关的更多详细信息。
我正在使用 Gmaps4Rails,上面描述的功能在使用 Google 的标准 Infowindows 实现时可以正常工作,但如果我尝试使用 InfoBox 插件,以便获得 InfoBox 的所有样式优势,我会收到错误消息。
ActionController::UnknownFormat
Screen grab of rails error message here
查看日志,似乎请求正在作为带有 Infowindows 的 JS 正确发送,但由于某种原因,在使用 InfoBox 插件时,它被作为 HTML 发送。
Infowindow 的日志消息是这样的...
于 2016 年 5 月 21 日 13:50:02 开始为 ::1 获取“/plots/1/plotdetails” +0100 由 PlotsController#plotdetails 作为 JS 参数处理:{“id”=>“1”} 绘图负载(0.3 毫秒)选择“地块”。* 从“地块”WHERE "plots"."id" = $1 LIMIT 1 [["id", 1]] 渲染 plots/_plotdetails.html.erb (0.1ms) 渲染 plots/plotdetails.js.erb (4.0ms) 在 17ms 内完成 200 OK (Views: 14.4 毫秒 |活动记录:0.3 毫秒)
带有 InfoBox 插件的日志消息如下...
于 2016-05-17 18:52:38 开始为 ::1 获取 "/plots/2/plotdetails" +0100 由 PlotsController#plotdetails 处理为 HTML 参数:{“id”=>“2”} 绘图负载(0.3 毫秒)选择“绘图”。* 从“绘图”WHERE "plots"."id" = $1 LIMIT 1 [["id", 2]] 已完成 406 Not Acceptable in 3ms (ActiveRecord: 0.3ms)
ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/plots_controller.rb:95:in `plotdetails'
我找不到解决方案,所以我正在考虑尝试使用 JQuery AJAX 来实现它,但我不禁觉得这应该是可以修复的。任何想法将不胜感激。
routes.rb
Rails.application.routes.draw do
resources :architects
resources :plots do
get :plotdetails, :on => :member
end
root 'plots#map'
plots_controller.rb(控制器中有更多代码,但这似乎是相关部分)
def plotdetails
@plot = Plot.find(params[:id])
respond_to do |format|
format.js { render :layout => false }
end
end
views/plots/map.html.erb
<%= render 'partials/menu' %>
<div id="plotdetails"></div>
<div id="map"></div>
<script type="text/javascript">
buildMap(<%=raw @hash.to_json %>);
</script>
views/plots/_infobox.html.erb
<%= link_to plotdetails_plot_path(:id => plot.id), :remote => true do %>
<div id="infobox">
<div id="infobox-img">
<img src="<%= plot.img_link %>">
</div>
<div id="infobox-text">
<h3><%= plot.title %></h3>
<p>Architect: <%= plot.architect.name %></p>
<p><%= plot.address %></p>
</div>
</div>
<% end %>
views/plots/_plotdetails.html.erb
<div>
<ul>
<li>plot.title</li>
<li>plot.details</li>
</ul>
</div>
views/plots/plotdetails.js.erb
$( "#plotdetails" ).html( "<%= escape_javascript( render( :partial => "plotdetails", :locals => { :plot => @plot} ) ) %>" );
【问题讨论】:
-
请求可能是以 HTML 格式发送的。检查日志。原因很可能是脚本错误导致 Rails UJS 处理程序无法拦截点击。
-
你在哪里安装信息框的点击处理程序?您可以将该代码添加到您的问题中吗?
-
您目前使用的是哪个版本的rails?
-
@kajal Rails 版本是 4.2.6。 @Michael - 单击信息框时呈现部分的单击处理程序是_infobox.html.erb 中的link_to。你是这个意思吗? @Max - 认为你是对的。我已经用日志内容更新了问题。不知道如何最好地解决这个问题?尝试像这样
<%= link_to plotdetails_plot_path(:id => plot.id, :format => "js"), :remote => true do %>将 :format => 'js' 添加到 link_to 中,但随后出现错误“模板丢失”。不知道这是前进还是后退。
标签: ruby-on-rails infowindow gmaps4rails infobox