过去一天左右,我在 Ruby 1.9.3 中的 Rails 3.2.11 应用程序中一直在做这个,我已经阅读了所有接近这个的 SO 帖子。下面似乎更接近于编写此记录,因为由于 SO 响应,我已经微调了操作。我有一个商品,我想写一个与商品相关的价格记录。为了了解如何创建基本 API,我编写了一个命名空间和一个单独的价格控制器。
在尝试使用我在控制器中为 html 使用的构建操作后,我放弃了这种方法,只是在 JSON 调用中添加了商品 ID,因为我希望用户在 url 中有商品 ID。我更新的 Api::PriceController#create 只是对 Price 模型的基本创建。
商品.rb
class Commodity < ActiveRecord::Base
attr_accessible :description, :name
has_many :prices
accepts_nested_attributes_for :prices
end
价格.rb
class Price < ActiveRecord::Base
attr_accessible :buyer, :date, :price, :quality, :commodity_id
belongs_to :commodity
end
价格控制器.rb
class PricesController < ApplicationController
def create
@commodity = Commodity.find(params[:commodity_id])
@price = @commodity.prices.build(params[:price])
end
api/prices_controller.rb
module Api
class PricesController < ApplicationController
respond_to :json
def create
respond_with Price.create(params[:price])
end
end
end
路线.rb
namespace :api, defaults: {format: 'json'} do
resources :commodities, only: [:show, :new, :create] do
resources :prices
end
end
这是我的卷曲电话:
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST http://localhost:3004//api/commodities/1/prices.json -d "{\"price\":{\"prices_attributes\":[{\"price\":8,\"buyer\":\"Sam\",\"quality\":\"Bad\",\"commodity_id\":1}]}}"
对此的回应是“无法批量分配受保护的属性:prices_attributes”
好的,我相信我应该能够做到这一点,因为另一篇 SO 帖子说,只要我不包括 created_by、updated_by 时间戳,我就应该很好。但我不是。在另一篇 SO 帖子中,一张与我类似的海报让他开始像 AREL 调用一样进行 JSON 调用,并将其包装在 price_attributes 中。拉动这个包装器,使它看起来像这样:
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST http://localhost:3004//api/commodities/1/prices.json -d "{\"price\":{\"price\":8,\"buyer\":\"Sam\",\"quality\":\"Bad\",\"commodity_id\":1}}"
返回“Api::PricesController 的未定义方法 `price_url'”。为什么这似乎不起作用?