Restangular + rails: 未知属性错误
Restangular + rails: unknown attribute error
我想使用 Restangular 提出补丁请求以更新用户属性。所以,写这个:
user.patch(user: user).then(function (result) ...
我在 rails 中使用 grape 框架,我的控制器如下所示:
desc 'Update a user'
params do
requires :user, type: Hash, desc: "user attributes" do
optional :email, type: String, allow_blank: false, regexp: /.+@.+/, documentation: { example: 'example@hubeert.com' }
optional :password, type: String, allow_blank: false
optional :firstname, type: String
optional :lastname, type: String
optional :city, type: String
optional :date_of_birth, type: Date
end
end
patch ':id' do
puts params.to_h
user = User.find(params[:id])
user.update(params[:user].to_h)
user
end
不幸的是,我的用户模型没有属性路由,因此 rails 显示此错误:
ActiveRecord::UnknownAttributeError (unknown attribute: route):
app/controllers/api/v1/users.rb:44:in `block (2 levels) in <class:Users>'
我该怎么办?在 angular 或 rails 中删除此属性?可以仅使用我选择的参数更新模型吗?
请记住,最好 create/update 只记录您希望允许的参数 - 您可以使用 Grape 轻松做到这一点。
Grape 有一个方便的 declared
方法,它接受 params
和可选的 include_missing 参数。因此,您可以编写一个帮助程序来过滤掉未在 params do ... end
块中声明的任何参数:
def permitted_params
@permitted_params ||= declared(params, include_missing: false).to_h
end
然后在你的控制器中:
patch ':id' do
user = User.find(params[:id])
user.update(permitted_params[:user])
end
我想使用 Restangular 提出补丁请求以更新用户属性。所以,写这个:
user.patch(user: user).then(function (result) ...
我在 rails 中使用 grape 框架,我的控制器如下所示:
desc 'Update a user'
params do
requires :user, type: Hash, desc: "user attributes" do
optional :email, type: String, allow_blank: false, regexp: /.+@.+/, documentation: { example: 'example@hubeert.com' }
optional :password, type: String, allow_blank: false
optional :firstname, type: String
optional :lastname, type: String
optional :city, type: String
optional :date_of_birth, type: Date
end
end
patch ':id' do
puts params.to_h
user = User.find(params[:id])
user.update(params[:user].to_h)
user
end
不幸的是,我的用户模型没有属性路由,因此 rails 显示此错误:
ActiveRecord::UnknownAttributeError (unknown attribute: route):
app/controllers/api/v1/users.rb:44:in `block (2 levels) in <class:Users>'
我该怎么办?在 angular 或 rails 中删除此属性?可以仅使用我选择的参数更新模型吗?
请记住,最好 create/update 只记录您希望允许的参数 - 您可以使用 Grape 轻松做到这一点。
Grape 有一个方便的 declared
方法,它接受 params
和可选的 include_missing 参数。因此,您可以编写一个帮助程序来过滤掉未在 params do ... end
块中声明的任何参数:
def permitted_params
@permitted_params ||= declared(params, include_missing: false).to_h
end
然后在你的控制器中:
patch ':id' do
user = User.find(params[:id])
user.update(permitted_params[:user])
end