У меня есть две модели
Проект , который имеет has_and_belongs_to_many :users
и
Пользователи , который имеет has_and_belongs_to_many :projects
в представлении проекта У меня есть форма, которая имеет селектор, в котором я хочу попробовать назначить несколько пользователей в проект.
<%= select_tag("project[users]", options_for_select(@users, @project_users), {:multiple=>true, :size=>6} )%>
в моем контроллере проекта переменные, которые используются при выборе, это
@project_users = @project.users.collect { |user| user.id}
@users = User.all.collect { |user| ["#{user.first_name} #{user.last_name}", user.id] }
, которые все выводят
<select id="project_users" multiple="multiple" name="project[users][]" size="6">
<option value="#<User:0x007f567cb7f078>">User1</option>
<option value="#<User:0x007f567cb7e9c0>">User2</option>
</select>
. Проблема в том, что это не эквивалентно
@some_project << [User(#), User(#)]
("обратите внимание, что пользователь (#) представляет экземпляр класса" )
вместо этого эквивалентен
@some_project << ["1", "2"]
Проблема в том, что пользовательский экземпляр преобразуется в строку, но не возвращается обратно в экземпляр.
Что не работает и выдает ошибку
ActiveRecord::AssociationTypeMismatch in ProjectsController#update
User(#70004716784160) expected, got String(#4266680)
Как я могу заставить это работать правильно?