【问题标题】:Ruby - RESTful APIRuby - RESTful API
【发布时间】:2014-06-17 03:13:42
【问题描述】:

我正在尝试使用 ruby​​ 及其 RESTful 路由构建一个 RESTful API。我对 ruby​​ 完全陌生(这是我的第一个项目),并且发现它的学习曲线非常陡峭。我试图生成一个简单的用户模型,并试图用它创建一个 CRUD 示例。目前,我坚持从发布的 json 对象在控制器内创建用户对象。我已经实现了自己的 create 方法,并试图让它回显我发布给它的 json 对象。由于某种原因,我得到的只是一个 404 回复和一个显示我的溃败的页面。这是我用来实现API的模型、控制器、路由文件和迁移文件,为什么没有按预期工作?

用户模型:

#the user model
class User < ActiveRecord::Base
  validates :password, :email, :first_name, :last_name, :presence =>true
  validates_uniqueness_of :email

end

数据库迁移文件:

#migration file
class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :last_name, :null => false
      t.string :email, :null => false
      t.string :first_name, :null => false
      t.string :password, :null => false

      t.timestamps
    end
  end
end

路线文件:

Rails.application.routes.draw do

  # Define api routes for user
  namespace :api do
   resources :user, :defaults => { :format => 'json' }
  end
end

用户控制器文件:

#user controller 
class UserController < ApplicationController
  def create
    puts params
  end
end

我做错了什么?为什么我的帖子对象没有显示到控制台?

【问题讨论】:

  • user_controller.rb 在 app/controllers/api 文件夹中吗?
  • 我将控制器放在 api 文件夹中我现在收到 500 内部服务器错误@nyzm
  • 这是我得到的新错误:Started POST "/api/user.json" for 174.112.216.92 at 2014-06-17 03:53:56 +0000 Processing by Api::UserController#create as JSON Parameters: {"test"=&gt;"test", "user"=&gt;{}} Can't verify CSRF token authenticity Completed 422 Unprocessable Entity in 1ms
  • 它似乎正在处理一些它抛出 422 的东西,我似乎无法弄清楚为什么@nyzm

标签: ruby-on-rails ruby rest ruby-on-rails-4 restful-architecture


【解决方案1】:

最简单的方法是把这条线放到你的控制器中。

class UserController < ApplicationController
  skip_before_filter  :verify_authenticity_token
  def create
    puts params
  end
end

因为你是新手,所以不要陷入使用上述方法的一件事。详情见link

还要检查您的允许的参数

CSRF 令牌的另一种解决方案是在标头中传递它:

headers: {
  'X-Transaction': 'POST Example',
  'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}

【讨论】:

【解决方案2】:

在用户控制器的创建操作中,尝试重定向到另一个页面或呈现另一个视图。我相信这将摆脱路由错误。

class UserController < ApplicationController
  def create
    puts params
    redirect_to(another_page)
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多