【问题标题】:Google Maps InfoBox causing ActionController::UnknownFormat error in Rails appGoogle Maps InfoBox 在 Rails 应用程序中导致 ActionController::UnknownFormat 错误
【发布时间】: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 - 认为你是对的。我已经用日志内容更新了问题。不知道如何最好地解决这个问题?尝试像这样&lt;%= link_to plotdetails_plot_path(:id =&gt; plot.id, :format =&gt; "js"), :remote =&gt; true do %&gt; 将 :format => 'js' 添加到 link_to 中,但随后出现错误“模板丢失”。不知道这是前进还是后退。

标签: ruby-on-rails infowindow gmaps4rails infobox


【解决方案1】:

由于 respond_to 已从 rails 4.2 中删除到单个 gem,我建议您使用 gem 'responders'

请查看下面给出的链接以获取更多详细信息..

Why is respond_with being removed from rails 4.2 into it's own gem?

【讨论】:

  • 感谢您的建议。我将 gem 'responders' 添加到 gemfile 中,但仍然是同样的问题。我有一段非常相似的代码在另一个带有 rails 4.2.6 的应用程序中工作,所以感觉这里也发生了其他事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 2018-08-28
相关资源
最近更新 更多