看到很多与此相关的问题,但没有一个问题可以解答我的问题。 我有没有ActiveRecord支持的Rails api应用程序。很容易重现问题。按照步骤: 在没有ActiveRecord支持的情况下创建rails api站点
rails new test001 -O --api
将文件夹更改为test001并运行:
rails g scaffold testapp id name
在app / models文件夹中创建模型文件 testapp.rb
class Testapp
include ActiveModel::Model
attr_accessor :id, :name, :created_at, :updated_at
def self.all
t1 = Testapp.new(:id =>111, name: "t111")
return [t1]
end
end
启动服务器
rails s
使用postman REST客户端创建GET请求
http://localhost:3000/testapps.json
失败,错误为ActionView::Template::Error (No route matches {:action=>"show", :controller=>"testapps", :format=>:json, :id=>#<Testapp:0x00000005411518 @id=111, @name="t111">} missing required keys: [:id]):
我有POST,PUT,GET 1项目和所有工作的虚拟实现。这是GET 1项目的虚拟实现(/testapps/x.json)
def self.find(p)
return Testapp.new(:id =>p, name: "t123")
end
GET all(/testapps.json)有什么问题?
答案 0 :(得分:1)
找到解决方案。 问题是支架生成 index.json.jbuilder 文件:
json.array!(@testapps) do |testapp|
json.extract! testapp, :id, :id, :name
json.url testapp_url(testapp, format: :json) #REMOVE
end
它无缘无故地添加了行 json.url testapp_url(testapp,format :: json)。 json.extract!已反序列化的对象。 删除线解决问题。 我仍然不知道为什么testapp_url(testapp,格式:json)导致错误。检查Rails路由文档http://guides.rubyonrails.org/routing.html