【发布时间】:2015-08-02 01:37:27
【问题描述】:
我正在尝试将 accepts_nested_attributes_for 与 has_many 关联结合使用,但遇到了很多麻烦...
这是我的 user.rb 的简化版本:
class User < ActiveRecord::Base
...
has_many :user_permissions
accepts_nested_attributes_for :user_permissions
...
end
我的user_permission.rb:
class UserPermission < ActiveRecord::Base
belongs_to :user
...
end
还有我的 users_controller.rb:
class UsersController < ApiController
...
def update
@user.assign_attributes user_params
if @user.save
render partial: 'user', locals: { user: @user }
else
render json: {errors: @user.errors}.to_json, status: 500
end
end
...
private
def user_params
params.require(:user).permit(:first_name, :last_name, user_permissions_attributes: [ :user_id, :resource_id, :can_read, :can_update, :can_create, :can_delete ])
end
end
我正在参考this rails documentation,了解如何使用带有强参数的accepts_nested_attributes_for。
但是,当我从 users_controller 内部“puts user_params”时,我看到的就是这一切(没有参考 user_permissions):
{"first_name"=>"Joe", "last_name"=>"Shmoe"}
这是我提交给服务器的 JSON 示例(通过 angular $resource):
{
"id": 10,
"first_name": "Joe",
"last_name": "Shmoe",
"user_permissions": [
{
"organization_resource_id": 20,
"user_id": 10,
"can_update": true,
"can_read": true
},
{
"organization_resource_id": 21,
"user_id": 10,
"can_create": true,
"can_read": true
}
],
}
返回这个 JSON:
{
"id": 10,
"first_name": "Joe",
"last_name": "Shmoe",
"user_permissions": [],
}
我相当有信心这是我的 rails 层中的一个问题,但这里仅供参考的是我创建的 angular User.js 服务,用于与服务器执行这种 RESTful 交互:
angular.module('slics').service('User', [
'$resource', function($resource) {
return $resource('/api/users/:id', {
id: '@id'
}, {
update: {
method: 'PUT',
isArray: false
}
});
}
]);
真的不确定我在这里缺少什么。提交嵌套属性似乎不应该这么难......但是我做的研究越多,我就越意识到这似乎是一个很常见的 Rails 挫折。
如果在我的问题描述中包含任何其他上下文/信息有助于解决此问题,请随时发表评论,我很乐意提供!
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord ngresource