【问题标题】:How to make Angular and Rails interact? Unknown format error如何让 Angular 和 Rails 交互?未知格式错误
【发布时间】:2016-05-30 17:22:42
【问题描述】:

我的 first 项目中包含 ngResource 指令,以便能够与 RESTful API 进行交互。

然后我这样设置我的工厂:

angular.module('app').factory('User', [
  '$resource', function($resource) {
    return $resource('/api/user_login/:id', { id: '@id' }, {
      update: { method: 'PUT' }
    });
  }
]);

在我的控制器中,我尝试保存用户,即发送 POST 请求。

app.controller('loginCtrl', [
  '$scope', 'User', function($scope, User) {
    return User.save();
  }
]);

我的 second 项目的控制器如下所示。我正在尝试引用创建操作。

class UserSessionsController < UserApplicationController
  respond_to :js, only: :create

  def create
    if @counterparty
      session[:counterparty_id] = @counterparty.id
      @counterparty.update(signed_in: true)
    else
      flash.now[:error] = 'Invalid email or password'
    end

    respond_with(@counterparty, layout: false)
  end
end

因此,我得到了 ActionController::UnknownFormat。

Started POST "/user_login" for 127.0.0.1 at 2016-02-18 16:04:58 +0200
Started POST "/user_login" for 127.0.0.1 at 2016-02-18 16:04:58 +0200
Processing by UserSessionsController#create as HTML
Processing by UserSessionsController#create as HTML
  Counterparty Load (0.3ms)  SELECT  `counterparties`.* FROM `counterparties`  WHERE `counterparties`.`email` IS NULL AND `counterparties`.`password` IS NULL LIMIT 1
  Counterparty Load (0.3ms)  SELECT  `counterparties`.* FROM `counterparties`  WHERE `counterparties`.`email` IS NULL AND `counterparties`.`password` IS NULL LIMIT 1
Completed 406 Not Acceptable in 1ms
Completed 406 Not Acceptable in 1ms

ActionController::UnknownFormat (ActionController::UnknownFormat):
  app/controllers/user_sessions_controller.rb:13:in `create'

我该如何解决这个问题?

【问题讨论】:

  • 您能否包含该请求的完整 Rails 日志?
  • @MichalSzyndel 更新了问题

标签: ruby-on-rails angularjs ruby-on-rails-3 ruby-on-rails-4 ngresource


【解决方案1】:

改变 respond_to :js, only: :createrespond_to :json, only: :create

用户工厂正在做一个json格式的请求,虽然控制器应该响应对op不起作用的js(包括json),所以需要显式设置respond_to json

【讨论】:

  • 你能解释一下答案是如何解决问题的吗?
  • 当然,用户工厂正在做一个json格式的请求,虽然控制器应该响应对op不起作用的js(包括json),所以需要显式设置respond_to json
  • 太棒了。您可以编辑答案以反映解释吗?
  • 如果我必须根据请求对两种格式都做出响应怎么办?我的项目中也需要有 js。
  • 您可以按照 Pitabas 的建议在控制器操作中添加多个 respond_to
【解决方案2】:

用下面的函数替换创建函数

    def create
      respond_to do |format|
       if @counterparty
         session[:counterparty_id] = @counterparty.id
         @counterparty.update(signed_in: true)
         format.json  { render :json => @counterparty.to_json ,status: :ok}
       else
         format.json  { render :json => 'Invalid email or password',status: :unprocessable_entity}
       end
      end
   end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多