【问题标题】:Rails Unknown format error (both HTML and JS)Rails 未知格式错误(HTML 和 JS)
【发布时间】:2014-12-30 21:30:49
【问题描述】:

我目前正在使用 Rails 4,并且有 3 个控制器可以执行以下操作:

respond_to do |format|
  format.html
  format.js
end

其中两个目前工作正常,但第三个控制器抱怨 ActionController::UnknownFormat 在 ArticlesController#drafts 中。这是有问题的控制器:

def drafts
  @user = current_user
  @drafts = @user.articles.paginate(page: params[:page], per_page: 5).draft_and_in_order
  respond_to do |format|
    format.html
    format.js
  end
end

其他两个控制器的包含 sn-p 格式的操作看起来相似。它们也都使用相同的 ajax 调用,所以可能不是这样,并且调用只是对当前页面的简单默认 ajax 调用(例如)

$.ajax({ });

在我的 Rails 服务器中触发article#drafts 操作看起来不错,因为它发出正确的 GET 响应。我认为可能是这种情况的唯一区别是articles#drafts 在它之前有一个before_actions:

before_action :logged_in_user, only: [:new, :create, :update, :destroy, :drafts]
before_action :correct_user_format, only: [:new, :drafts]

因为它们包含一些redirect_to:

 def correct_user_format
   user = User.find_by(id: params[:format])
   unless current_user?(user)
     redirect_to root_url
   end
 end

 def logged_in_user
     unless logged_in?
     flash[:danger] = "Please log in"
     redirect_to root_url
   end
 end

唉,删除这些和 before_actions 会遇到相同的错误。事实上,如果我只这样做:

respond_to do |format|
  format.html
end

respond_to do |format|
  format.js
end

我仍然遇到未知格式问题。所有的控制器都是ApplicationController的子类,我对应的.js.erb放到app/views/articles/drafts.js.erb中。所以我不太确定在哪里或什么可能导致 rails 抛出该错误。我的堆栈跟踪的前几行:

actionpack (4.2.0.beta4) lib/action_controller/metal/mime_responds.rb:230:in `respond_to'
actionpack (4.2.0.beta4) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.2.0.beta4) lib/abstract_controller/base.rb:198:in `process_action'
actionpack (4.2.0.beta4) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.2.0.beta4) lib/abstract_controller/callbacks.rb:20:in `block in process_action'

【问题讨论】:

  • 尝试将user = User.find_by(id: params[:format]) 中使用的参数名称更改为其他名称。可能是 Rails 解析请求格式有问题。
  • 啊,好的,修复它:我不知道路由中的 .:format 指的是页面的实际格式,而不仅仅是一个额外的参数。重构时间。谢谢!
  • 我已将我的评论作为答案发布,请将其标记为答案,以便其他人在谷歌搜索时看到他们缺少的内容:)

标签: javascript ruby-on-rails ajax ruby-on-rails-4


【解决方案1】:

尝试将user = User.find_by(id: params[:format]) 中使用的参数名称更改为其他名称。 Rails解析请求格式应该有问题。

【讨论】:

    猜你喜欢
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多