Rails 3: массовое назначение с ActiveAdmin и has_one - PullRequest
2 голосов
/ 28 сентября 2011

Я разрабатываю приложение для рельсов, в котором у меня есть две модели User и Client.User поддерживается devise и отвечает за аутентификацию, а has_one Client содержит данные клиента для данного пользователя.Это отношение всегда присутствует, так как я гарантирую, что модель Client создается всякий раз, когда я создаю User.

Для области администрирования, которую я использую ActiveAdmin.Теперь, когда я пытаюсь создать User через интерфейс администрирования, я использую такую ​​форму:

form do |f|
  f.inputs :username, :email, :password
  f.inputs :name => "Client", :for => :client do |client|
    client.inputs :name, :address, ...
  end
end

Проблема в том, что либо User, ни Client сохраняются, а страницазагружается с ошибками проверки.Я проверил консоль rails, и каждый раз, когда я пытаюсь создать User.

, появляется сообщение WARNING: Can't mass-assign protected attributes: client_attributes. Я искал эту проблему и обнаружил, что для массового назначения необходимо определитьattr_accessible для каждого поля, разрешенного для назначения.Итак, я поместил эту директиву в модель Client для каждого из упомянутых выше полей, и сообщение продолжает появляться, препятствуя правильному сохранению моделей.

У кого-нибудь есть подсказки по этому поводу?

1 Ответ

5 голосов
/ 29 сентября 2011

Проблема не в вашей Client модели, а в вашей User модели - потому что это основная модель, которую вы пытаетесь создать. Все, что вам нужно сделать, это добавить client_attributes в список attr_accessible атрибутов в вашей User модели, как указано в сообщении об ошибке в файлах журнала, например ::

.
class User < ActiveRecord::Base
  attr_accessible :client_attributes
end

Я полагаю, у вас уже есть список доступных атрибутов в классе User. Так что просто добавьте client_attributes в конец этого списка.

Изменения, которые вы внесли в вашу модель Client (то есть добавление списка атрибутов в attr_accessible), не нужны для этого. Если вы хотите, вы также можете пойти дальше и отменить это.

...