Я пытаюсь использовать 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 с сильными параметрами.
Однако, когда я ставит user_params "изнутри users_controller это все, что я не вижу (никаких ссылок на user_permissions):
{"first_name"=>"Joe", "last_name"=>"Shmoe"}
Вот пример JSON я вношу на сервер (через угловой $ ресурса):
{
"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": [],
}
Я довольно уверен, что это проблема в моем рельсах слое, но только для справки здесь угловая user.js службы я создал, чтобы выполнить это RESTful взаимодействие с сервером:
angular.module('slics').service('User', [
'$resource', function($resource) {
return $resource('/api/users/:id', {
id: '@id'
}, {
update: {
method: 'PUT',
isArray: false
}
});
}
]);
На самом деле не конечно, что мне здесь не хватает. Кажется, что это трудно представить вложенные атрибуты ... но чем больше исследований я делаю, тем больше я понимаю, что это похоже на довольно распространенное разочарование Rails.
Пожалуйста, не стесняйтесь комментировать, если какой-либо дополнительный контекст/информация будет полезен для включения в описание проблемы, чтобы помочь устранить эту проблему, и я был бы рад предоставить ее!
Этот вызов 'allow' фактически не позволит использовать полезную нагрузку JSON, которую вы покажете в качестве примера. 'user_permissions_attributes' будет разрешено, но не' user_permissions'. – bschaeffer
извините, мой плохой, исправленный –