Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails activerecord保存的数据均为零/空_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails Rails activerecord保存的数据均为零/空

Ruby on rails Rails activerecord保存的数据均为零/空,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我是这方面的初学者,我正在尝试构建一个非常基本的控制器 这是我的写入/创建方法: 它检查参数中是否包含id。如果有ID,它会执行put请求以更新现有汽车。否则,它只会制造一辆新车 def write if params[ :id ] @car = Car.where( id: params[ :id ] ).first params[ :car ].each do | key, value | attribute = { "#{ key }": v

我是这方面的初学者,我正在尝试构建一个非常基本的控制器

这是我的写入/创建方法:

它检查参数中是否包含id。如果有ID,它会执行put请求以更新现有汽车。否则,它只会制造一辆新车

def write
    if params[ :id ]
      @car = Car.where( id: params[ :id ] ).first
      params[ :car ].each do | key, value |
        attribute = { "#{ key }": value }
        @car.update_attributes( attribute )
      end
    else
      @car = Car.new( 
                model: params[ :model ], 
                num_wheels: params[ :num_wheels ], 
                color: params[ :color ], 
                realm_uuid: params[ :realm_uuid ] 
              )      
    end

    @car.save!
    render json: @car
  end
这是my routes.rb文件:

Rails.application.routes.draw do

  scope '/api' do
    get '/' => 'cars#query'
    post '/' => 'cars#write'

    scope '/:id' do
      get '/' => 'cars#read'
      put '/' => 'cars#write'
      delete '/' => 'cars#delete'
    end
  end

end
最后是我的车。rb:

class Car < ApplicationRecord

    attr_accessor :model, :num_wheels, :color, :realm_uuid

end
class-Car
所有路由都正常工作,我可以创建、读取、更新和删除。问题是当我读取时,所有的值都是nil/null。当我在Postman中发布帖子时,
render json:@car
返回一个包含所有值的正确car,但当我发出get请求时,它会说所有值都为nil/null


我还看到一个错误:
ArgumentError(参数数量错误(给定1,预期为4)
这可能与此有关…

模型上的attr\u访问器
为实例变量创建一个具有相应名称的读写器方法

在您的情况下,它会覆盖模型属性的getter/setter,因此您会写入变量而不是属性。因此,删除
attr\u accessor
,模型应该正确保存


如果您在db中没有这些字段,那么您应该进行迁移以添加它们。

我的模型确实有所有这些字段。然后删除
attr\u accessor
,使rails的那些字段工作起来哇,这很有效。谢谢Vasfed!我知道attr\u accessor允许读/写/etc,但我不知道这会干扰我的控制器功能。
 如果有ID,它会执行put请求来更新现有的汽车。否则,它只会创建一辆新车。
-这就是RESTful API在Rails中的工作方式。请参阅资源路由:。那么,当您可以使用标准工具(如Rail资源)实现相同的目标时,为什么要重新发明轮子并与框架抗衡呢?另外,
更新属性es
update
的别名,因此逐个更新属性比您需要的工作量和数据库流量大得多,而且您忽略了返回值。此外,
where(id:x)。首先
应该是
find(x)
或者,如果您准备返回
nil
(您没有这样做),
find_by(id:x)
。还有@IlyaKonyukhov说的话。