我有两个型号的Ruby on多重选择与很多Rails的许多关系
项目具有has_and_belongs_to_many:用户
和
用户具有has_and_belongs_to_many:项目
在项目视图中I有一个表单,其中有一个选择器,我想尝试将多个用户分配给一个项目。
<%= 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)
我怎样才能正确地做这项工作?
在你的'ProjectsController'的更新方法中,你能不能用每个这样的id做一个User.find(user.id),然后从那里建立关联的用户? (这是假设'选项值=“1”'值是用户的ID。) – Zajn
我不认为这是干燥的,看看我是否可以通过格式正确的参数。 –
好点,但它可能会作为临时解决方案,直到你可以找到一个更优雅的。 – Zajn