没有路线匹配{:action =>" show" ...缺少必需的密钥:[:id]

时间:2016-04-29 13:31:22

标签: ruby-on-rails-4 activemodel

看到很多与此相关的问题,但没有一个问题可以解答我的问题。 我有没有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)有什么问题?

1 个答案:

答案 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