【问题标题】:Rails render_to giving 406 not acceptable errorRails render_to 给出 406 不可接受的错误
【发布时间】:2013-12-18 17:12:39
【问题描述】:

所以,我一直在尝试纠正我隐藏推文的选择。它工作过一次,但由于我当时没有保存它,所以我失去了我的方法。

我的功能很简单,你点击隐藏,它就会隐藏一条推文。这是我在控制器中的内容;

def hide
    @newtweet = Newtweet.find(params[:id]).update_attribute(:stauts, 'new')

    respond_to do |format|
        format.js {flash[:notice] = "We've archives your tweet for later."}
    end 
end

这是我的链接;

<%= link_to "hide", hide_url(:id => tweetsy.id), :class => "btn btn-warning btn-sm hideit hidden-xs", :remote => true %>

最后,这是我的链接路线中的内容;

match '/dashboard/hide/:id' => 'dashboards#hide', :as => :hide

我的仪表板控制器中有 def hide.. 只要我添加它就可以工作

respond_to do |format|

end

甚至……这一切都给了我

Completed 406 Not Acceptable in 8ms (ActiveRecord: 1.8ms)

不知道,我之前是如何让它工作的,我正要拔掉我的头发。如果我添加 format.js .. 同样的旧东西。如果我删除

respond_to do |format|
end

这一切正常.. 即使上面留下了它,仍然隐藏它,但我得到一个空白屏幕而不是一个很好的 ajax 发生。

【问题讨论】:

  • 当一个动作有一个空的respond_to块时,响应状态406是正常的,因为这个空块表示该动作不响应任何格式。如果你有 format.js... 行,你应该得到一个错误(状态 500),因为 rails 找不到匹配的视图(至少在没有 app/views/THERESOURCE/hide.js.SOMEHANDLER 文件的情况下)。你到底想达到什么目的?
  • Margin - 我只是在更新我的数据库,将它的状态从新更改为隐藏......所以它不会显示在整体视图中。该 js 用于隐藏推文并在不刷新页面的情况下更新。
  • 我的意思是,马丁,对不起。此外,无论我是否有 format.js,似乎只要我添加 respond_to 块,它就会退出并附带Completed 406 Not Acceptable in 7ms
  • 完全取出respond_to do |format|,给我缺少模板的错误。有点迷茫

标签: javascript jquery ruby-on-rails twitter


【解决方案1】:

我确信这是一个 Rails 错误,因为即使使用正确的路由,我在 JSON 调用(如文档中的 here)中也遇到了同样的问题。

如果您尝试使用本地 URL 显式调用链接以进行隐藏,最后使用 JS 扩展名,请查看您是否停止收到 406 错误。

<%= link_to "hide", "/hide.js?id=" + tweetsy.id.to_s, :class => "btn btn-warning btn-sm hideit hidden-xs", :remote => true %>

我知道这看起来像是一个 hack,但我在 JSON 上遇到类似问题的几次都没有成功。也许其他人在 URL 路径上有完全限定的 .js 或 .json 的答案会有所作为。或者如何在路线本身中改变它。

【讨论】:

  • 感谢您的帮助。我实际上是在疯狂并从头开始之后才弄清楚的,看来我必须在我的 application.js 中省略/= require jquery_ujs
  • 现在一切正常。我在这方面不好,从错误中吸取教训,这一切对吗? :) 感谢你们俩的帮助。顺便说一句,creativereason = 直接链接与否,它正在丢弃 406 错误,我猜是因为它缺少 jquery 的 ujs 文件中的内容。
  • 我以前见过这个错误(不使用 ujs 文件时)。即使链接了 ujs 文件,我也看到了 JSON 上的 406。很高兴你的工作正常吗?
  • 它工作正常,但很奇怪。希望我不会再看到它,花了足够多的时间才能弄清楚哈哈……但是似乎我的 ui 触摸现在不起作用。也许是 jQuery 冲突,但这是另一个问题 :) 再次感谢!
【解决方案2】:

为了最终确定这一点,请确保您的所有 jQuery 文件都已正确设置,并且它们的所有集合都在您的适当区域内。就我而言,我需要以下内容才能使所有respond_to 工作。我知道,我知道,我很傻。

你的 Application.js 应该有这些。

 /= require jquery
//= require jquery_ujs
//= require jquery.ui.touch-punch
//= require_tree .

所有其他 Gem 明智的东西都应该在您的 Gemfile 中或手动安装。感谢大家对此提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多