【问题标题】:How to get data from Postman in Rails Controller?如何从 Rails 控制器中的 Postman 获取数据?
【发布时间】:2016-11-18 21:21:58
【问题描述】:

我想询问邮递员的 param post,以便我可以在 rails 的控制器中获取它。

这是我的控制器

class Api::V1::UsersController < ApplicationController
  before_action :get_user, only: [:show, :fullname]
  #get all user object
  def index
    render :json => User.all
  end

  # get user object with id
  def show
    render :json => @user
  end

  # get full name of user object with id
  def fullname
    @hasil = @user.firstname + ' ' + @user.lastname
    render :json => @hasil
  end

  # post object into model
  def create
    @user = User.new(user_params)
    @user.save
    if @user.save
        render :json => @user
    else
        render :json => @user.errors.full_messages
    end
  end

  private
    def user_params
      params.permit(:username, :firstname, :lastname, :age)
    end

    def get_user
      @user = User.find(params[:id])
    end
end

当我在邮递员中尝试时,我的用户名、名字、姓氏和年龄都为空。

我是这样发的

[
  {
    "username": "admin2",
    "firstname": "Reza Adha",
    "lastname": "Hamonangan",
    "age": 23,
  }
]

我尝试发帖时的 Rails 服务器日志

Started POST "/api/v1/users" for ::1 at 2016-11-18 18:04:24 +0700
  ActiveRecord::SchemaMigration Load (0.0ms)  SELECT `schema_migrations`.* FROM `schema_migrations`
Processing by Api::V1::UsersController#create as */* 
   (0.0ms)  BEGIN
  SQL (1.0ms)  INSERT INTO `users` (`created_at`, `updated_at`) VALUES ('2016-11-18 11:04:25', '2016-11-18 11:04:25')
   (4.2ms)  COMMIT
   (0.0ms)  BEGIN
   (0.0ms)  COMMIT
Completed 200 OK in 22ms (Views: 0.3ms | ActiveRecord: 7.2ms)

我认为我在控制器中做错了从邮递员那里获取 POST DATA。 请帮我.. 感谢您的关注。

【问题讨论】:

  • 您可以添加您的服务器日志以进行参数传递,以便更好地跟踪错误吗?
  • Started POST "/api/v1/users" for ::1 at 2016-11-18 18:04:24 +0700 ActiveRecord::SchemaMigration Load (0.0ms) SELECT schema_migrations.* FROM schema_migrations` Api::V1::UsersController#create as / (0.0ms) BEGIN SQL (1.0ms) INSERT INTO @ 987654326@ (created_at, updated_at) 值 ('2016-11-18 11:04:25', '2016-11-18 11:04:25') (4.2ms) COMMIT (0.0ms) BEGIN ( 0.0ms) COMMIT 在 22ms 内完成 200 OK (Views: 0.3ms | ActiveRecord: 7.2ms)`
  • 这里,您的参数似乎不是从邮递员传递过来的。
  • 我编辑了我的帖子,我粘贴了日志以便您轻松查看
  • 这里的参数列表是空白的。请检查您的邮递员请求和参数。

标签: ruby-on-rails postman


【解决方案1】:

您需要参数上的user 键:

[
  "user": {
    "username": "admin2",
    "firstname": "Reza Adha",
    "lastname": "Hamonangan",
    "age": 23,
  }
]

并在强参数上允许user

params(:user).permit(:username, :firstname, :lastname, :age)

【讨论】:

  • 身体的类型是什么?当我将您的 json 复制并粘贴到 body raw 时,我仍然得到 null 结果。
  • 如果我使用我的 get /users,我会得到这样的数据。[ { "id": 1, "username": "admin", "firstname": "Reza Adha", "姓氏”:“Hamonangan”,“年龄”:23,“created_at”:“2016-11-18T00:00:00.000Z”,“updated_at”:“2016-11-18T00:00:00.000Z”},{“ id”:28,“username”:“admina”,“firstname”:“Reza Adha”,“lastname”:“Hamonangan”,“age”:23,“created_at”:“2016-11-18T00:00:00.000 Z", "updated_at": "2016-11-18T00:00:00.000Z" } ]
【解决方案2】:

好的,所以我从here 找到了答案。我在邮递员 T_T 中插入了这么错误的内容

应该是这样的

{
    "user" : {
      "username": "admin2",
      "firstname": "Reza Adha",
      "lastname": "Hamonangan",
      "age": 23
    }
}

我没有给出标题应用程序/json。 我很抱歉这个大惊小怪。谢谢@user100693 和@MurifoX

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多