Ruby on rails Rails activerecord保存的数据均为零/空
我是这方面的初学者,我正在尝试构建一个非常基本的控制器 这是我的写入/创建方法: 它检查参数中是否包含id。如果有ID,它会执行put请求以更新现有汽车。否则,它只会制造一辆新车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
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说的话。