Мультиселектор Ruby On Rails с отношением «многие ко многим»

У меня есть две модели

Проект , который имеет 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)

Как я могу заставить это работать правильно?

0
задан Polygon Pusher 24 May 2012 в 21:15
поделиться