ваш params missiong topic_ids вы можете добавить его, как пример кода ниже
def user_params
params.require(:user).permit(
:name, :email, :password,
:password_confirmation, topic_ids: [])
end
Редактировать:
Я думаю, ваш контроллер обновлений уже верен, другую альтернативу для пользователя, чтобы выбрать тему вы можете используйте collection_select
<%= f.collection_select :topic_ids, Topic.all.sample(50), :id, :topic_name, {}, { multiple: true } %>
Сам механизм сериализации не изменился. Для отдельных классов это будет зависеть от определенного класса. Если класс имеет serialVersionUID поле, это, как предполагается, указывает на совместимость сериализации.
Что-то как:
private static final long serialVersionUID = 8683452581122892189L;
, Если это неизменно, сериализированные версии совместимы. Для классов JDK это гарантируется, но конечно всегда возможно забыть обновлять serialVersionUID после внесения повреждающегося изменения.
, Когда классы JDK, как гарантируют, не будут совместимы, это обычно упоминается в Javadoc.
Предупреждение: Сериализованные объекты этого класса не будут совместимы с будущими выпусками Swing
Не безопасно смешать Java 1.5 и 1.6. Например, мне сериализировали объект Java 1.5 в файл и попытался открыть его в Java 1.6, но он придумал ошибку ниже.
java.io.InvalidClassException: javax.swing.JComponent; local class incompatible: stream classdesc serialVersionUID = 7917968344860800289, local class serialVersionUID = -1030230214076481435
at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
Механизм сериализации в 1,5 и 1.6 совместим. Таким образом тот же код компилировал/выполнял в 1,5 и 1,6 контекстах, может обмениваться сериализованными объектами. Имеют ли два экземпляра VM ту же/совместимую версию класс (как может быть обозначен serialVersionUID полем), другой вопрос, не связанный с версией JDK.
, Если Вы имеете один сериализуемый Foo.java и используете это в 1.5 и 1.6 JDK/VM, сериализированных экземплярах Foo, созданного одним V; может быть десериализован другим.
После тестирования с сериализованным объектом, записанным в файл с помощью ObjectOutputStream в программе Java 1.5, затем выполняя чтение с ObjectInputStream в программе Java 1.6, я могу сказать, что это работало без любой проблемы.
Я быстро добавил бы, что возможно изменить класс, но забывают для изменения serialVersionUID. Таким образом, неправильно, что, "Если класс определяет serialVersionUID, и это не изменяется, класс, как гарантируют, будет совместим". Скорее наличие того же serialVersionUID является способом, которым API обещает обратную совместимость.
Обратите внимание, что Бобовая спецификация Java подробно излагает независимый от версии метод сериализации, который допускает сильную назад-совместимость. Это также приводит к читаемым "сериализированным" формам. На самом деле сериализованный объект может быть создан довольно легко с помощью механизма.
Ищут документацию к XMLEncoder
и XMLDecoder
классы.
я не использовал бы это для передачи объекта по проводу обязательно (хотя, если бы высокая производительность является требованием, я не использовал бы сериализацию ни один), но это неоценимо для устройства хранения данных постоянного объекта.
Если не указано иное, это должно быть частью совместимости на уровне двоичных кодов. Классы Swing явно не совместимы между версиями. Если Вы находите проблему с другими классами, сообщаете об ошибке на bugs.sun.com .
Вы читали Спецификация Сериализации объекта Java? Существует тема на управление версиями . Существует также статья для реализаторов класса: Обнаруживают секреты сериализации API Java. Каждый выпуск Java сопровождается примечания .
совместимостиОт спецификации Java 6 на сериализации:
<час>цели к: