Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何制作具有多对多关系的三个模型的表格_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如何制作具有多对多关系的三个模型的表格

Ruby on rails 如何制作具有多对多关系的三个模型的表格,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,为具有多对多关系的模型创建表单的最佳方法是什么 详细内容: 我有3个模型:用户、任务、任务分配: 用户模型 class User < ActiveRecord::Base has_many :task_assignments has_many :tasks, through: :task_assignments end class Task < ActiveRecord::Base has_many :task_assignments has_many :u

为具有多对多关系的模型创建表单的最佳方法是什么

详细内容: 我有3个模型:用户、任务、任务分配:


用户模型

class User < ActiveRecord::Base   
  has_many :task_assignments
  has_many :tasks, through: :task_assignments
end
class Task < ActiveRecord::Base
  has_many :task_assignments
  has_many :users, through: :task_assignments
end

通过创建一个新任务,应该可以为一个任务分配多个用户,因此我创建了以下表单视图:

任务编辑表单视图

<%= form_for(@task) do |f| %>
  <div class="field">
    <%= f.label :note %><br>
    <%= f.text_field :note %>
  </div>

  <select name="task[users]" size="5" multiple>
    <% @users.each do |user| %>
      <option value="<%= user.id %>"><%= user.email %></option>
    <% end %>
  </select>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我想我必须这样做:

@task = Task.new(task_params)
users = ???
@task.users << users
@task=task.new(任务参数)
用户=???

@task.users您不需要以任何特殊方式保存对象。只需记住在
任务参数中允许
:用户\u id=>[]

此外,使用form helper,您的生活可能会轻松一些

true,:size=>5}%>
有一个名为的帮助器,允许父对象创建和更新其嵌套对象。在这种情况下,您希望
任务
能够创建和更新
任务分配

首先,允许
Task
接受其子任务的属性并为其分配属性

class Task < ActiveRecord::Base
  has_many :task_assignments
  has_many :users, through: :task_assignments

  accepts_nested_attributes_for :task_assignments
end
类任务

这将为你指明正确的方向。创建表单将类似中所述。

哦,天哪,我也遇到了同样的问题。看看我的问题并研究投票的答案->
@task = Task.new(task_params)
users = ???
@task.users << users
<%= f.collection_select :user_ids, @users, :id, :email, {}, { :multiple => true, :size => 5 } %>
class Task < ActiveRecord::Base
  has_many :task_assignments
  has_many :users, through: :task_assignments

  accepts_nested_attributes_for :task_assignments
end