我不确定为什么下面的cURL调用似乎没有通过json将我期望的值传递给Ruby 1.9.3中的Rails 3.2.11应用程序。我有一个商品型号,其Accept_nested_attributes的价格,但使用我在SO上找到的几个cURL调用,每个属性都会出现NULL,除了goods_id应该是一个线索。但这对我来说并不明显。当然,价格模型有一个goods_id字段,您可以通过我的调用看出发行人必须知道price_id = 1的价格。下面的两个调用产生的结果相同。它可能只是一个错误的逗号或其他东西,但没有看到它。
commodity.rb
class Commodity < ActiveRecord::Base
attr_accessible :description, :name
has_many :prices
accepts_nested_attributes_for :prices
end
prices.rb
class Price < ActiveRecord::Base
attr_accessible :buyer, :date, :price, :quality, :commodity_id
belongs_to :commodity
end
API / prices_controller.rb
module Api
class PricesController < ApplicationController
respond_to :json
def create
commodity = Commodity.find(params[:commodity_id])
respond_with :api, :commodity, commodity.prices.build(params[:price])
end
end
的routes.rb
namespace :api, defaults: {format: 'json'} do
resources :commodities, only: [:show, :new, :create] do
resources :prices
end
end
以下是两个cURL调用:
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST http://localhost:3004/api/commodities/1/prices -d "{\"commodity\":{\"prices_attributes\":[{\"price\":\'8\',\"buyer\":\"Sam\",\"quality\":\"Bad\",\"commodity_id\":1}]}}"\",\"commodity_id\":1}]}}"
第二个基于搜索SO的NULL响应:
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST http://localhost:3004/api/commodities/1/prices -d "price[price]=6" -d "price[buyer]=Sam" -d "price[quality]=good" -d "price[commodity_id]=1"
他们都屈服:
{"buyer":null,"commodity_id":1,"created_at":null,"date":null,"id":null,"price":null,"quality":null,"updated_at":null}*
我没看到什么? thanx,sam
答案 0 :(得分:0)
我认为你总体上试图错误地使用嵌套属性。当你正确使用它时,你只发布给商品控制器。在这种情况下,您将使用price_attributes中传递的价格更新商品。
要实现这一点,您需要将:prices_attributes添加到商品方法的attr_accessible方法
您的示例不存储属性,因为params [:price]没有您期望的数据。 params [:commodity] [:prices_attributes] [0]具有正确的数据。 B
如果您有api发布和更新或创建单个价格,您应该更改您的curl以使用params [:price]并仅以价格哈希发送数据
一般情况下,请在帖子后检查rails控制台,看看params的外观,并确保它们符合您的预期。