我是新来的 Postman 。我有一个Rails服务器在后台运行。我试图模拟一个POST请求,但它没有被接受。
假设模型名为manufacturer_organization.rb
,在内部,它 * 需要 * 3个参数:organization_id (uuid data type), manufacturer_id (integer data type), and account_number (string data type).
manufacturer_organization
属于组织,也属于:制造商(反之亦然;制造商和组织有_多个制造商_组织)
在manufacturer_organizations_controller.rb
中,我有一个create方法:
def create
@manufacturer_organization = ManufacturerOrganization.new(manufacturer_organization_params)
if @manufacturer_organization.save
puts "success!"
render json: @manufacturer_organization
else
puts "Sorry, something went wrong"
end
end
我可以确认我有足够的授权;当我执行GET请求时,我得到了正确的JSON响应。我使用的是rails序列化器,并且我也为这个模型设置了序列化器。Route也是使用resources :manufacturer_organizations
设置的。我的直觉告诉我,我使用postman的方式是错误的。
这是Postman应用程序的屏幕截图。我在地址栏上有正确的地址,我正在执行POST请求。我在key-value
下有三个参数。
在我Send
它之后,在我的Rails服务器日志下,我看到:
Started POST "/manufacturer_organizations" for 127.0.0.1 at 2017-04-13 16:56:44 -0700
Processing by ManufacturerOrganizationsController#create as */*
Parameters: {"organization_id"=>"fb20ddc9-a3ee-47c3-bdd2-f710541-ff89c", "manufacturer_id"=>"1", "account_number"=>"A rand
om account number test"}
...
(0.4ms) BEGIN
(0.3ms) ROLLBACK
Sorry, something went wrong
我可以在rails console
中很好地执行ManufacturerOrganization.new(organization_id: Organization.last.id, manufacturer_id: Manufacturer.last.id, and account_number: "random test account number")
。
如何从 Postman 提交POST请求以添加新的制造商组织?
编辑:
def manufacturer_organization_params
api_params.permit(:organization_id, :manufacturer_id, :account_number)
end
而在application_controller.rb
内部
def api_params
@api_params ||= ActionController::Parameters.new(ActiveModelSerializers::Deserialization.jsonapi_parse(params))
end
编辑2:
我添加了error.full_messages
,得到的结果如下:
Manufacturer can't be blank
Organization can't be blank
Account number can't be blank
为什么是空白的?
3条答案
按热度按时间j9per5c41#
您可以使用params或在body请求中传递数据。
最好的方法是使用主体,因为您可以发送文件,并且请求在没有参数的情况下会变得更干净。
要在正文中发送数据,必须在“key”字段中传递模型名称和属性,并在“value”字段中传递值,如下所示:
z8dt9xmd2#
我不明白您对 params 做了什么。ActiveModelSerializers::Deserialization 在“Model”命名空间中命名是有原因的。它不应该用于序列化或反序列化Internet参数,而是用于序列化/反序列化模型示例。
如果参数以正确的格式到达,则 AplicationController 和 ManufacturerOrganizationsController 继承的 ActionController::Base 将为您反序列化它们。Rails查询参数格式如下所示:
这也可以被堆栈,并被Rails用于嵌套资源。例如:
说到这里,让我们来看看你的例子。首先,让我们扔掉那些手工构建的参数,坚持约定:
这样一来,我们就可以发送正确的格式化参数:
这两件事结合起来应该可以让你成功地创建你的资源。
关键的一点是params不是一个包含所有应该反序列化的参数的字符串,它应该已经被反序列化了,如果不是这样,那么你可能发送了错误的参数.
sd2nnvve3#
Ruby on Rails和 Postman -发布请求。
你好,这是我用Postman和Rails API开发的一个例子。
Postman
我不能添加图像,但这是你必须在postman中添加的键=值更改为发布请求并发送。
第七章.
Rails维护相同的代码。
我希望这能帮上忙。