如何使用表单将多个子节点添加到has_many的父节点中

时间:2015-01-21 13:23:50

标签: ruby-on-rails forms checkbox parent-child has-many-through

我正在使用一个练习应用程序,其中一个元素是用户has_many WorkoutTypes(代码中的WoType)(通过has_many:through关系),我想构建一个表单将每个WorkoutType中的多个添加到给定用户。

我目前有一个复选框表单,用于向用户添加单个不同的子项:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
...
...
<div class="field">
    <%= hidden_field_tag "user[wo_type_ids][]", nil %>
    <%= WoType.all.each do |wo_type| %>
        <%= check_box_tag "user[wo_type_ids][]", wo_type.id, @user.wo_type_ids.include?(wo_type.id), id: dom_id(wo_type) %>
        <%= label_tag dom_id(wo_type), wo_type.wo %><br>
    <% end %>
  </div>
...
...
<div class="actions">
    <%= f.submit "Update" %>
  </div>
<% end %>

这意味着用户可以编辑他们的帐户以选择其中一个,例如跑步,健身房,足球;但是,我希望他们能够选择尽可能多的人(即用户有三次&#39;运行&#39;)。知道如何更新表单来实现这个吗?

以下是模型的删节代码:

class User < ActiveRecord::Base
  has_many :wo_types, through: :wocfgs
  has_many :wocfgs, dependent: :destroy
end

class WoType < ActiveRecord::Base
  has_many :wocfgs
  has_many :users, through: :wocfgs
end

class Wocfg < ActiveRecord::Base
  belongs_to :user
  belongs_to :wo_type
end

奖励积分:复选框当前正在视图中打印其下方的所有WorkoutTypes,我不知道为什么。任何线索如何摆脱这将是伟大的!我无法发布图片,因为我没有代表,但这里有截图链接:http://i.imgur.com/Zb72JVQ.png

提前致谢!

1 个答案:

答案 0 :(得分:0)

奖励积分问题首先:<%= WoType.all.each do |wo_type| %>应为<% WoType.all.each do |wo_type| %>=打印循环后的所有内容。

关于主要问题:我使用Nested form来完成您正在做的事情。嵌套表单允许您将更多的每个复选框添加到列表中(通过JavaScript),因此在提交时,您可以使用多个&#34;运行&#34;已选中复选框。我想一个缺点是每个复选框后都会有链接,这可能看起来不是最好的。