如何设置表单以在has_many上创建多条记录:通过连接表?

时间:2014-12-10 12:48:38

标签: ruby-on-rails forms ruby-on-rails-4

我试图创建一个表单来创建一个新的练习,其中muscle_groups是练习的主要和次要。

以下是架构的相关部分:

create_table "exercised_muscle_groups", force: true do |t|
    t.integer "muscle_group_id"
    t.integer "exercise_id"
    t.string  "used_as"
end

add_index "exercised_muscle_groups", ["exercise_id"], name: "index_exercised_muscle_groups_on_exercise_id", using: :btree
add_index "exercised_muscle_groups", ["muscle_group_id"], name: "index_exercised_muscle_groups_on_muscle_group_id", using: :btree

create_table "exercises", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
end

create_table "muscle_groups", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
end

这是我对模特所拥有的:

class Exercise < ActiveRecord::Base
  has_many :exercised_muscle_groups, dependent: :destroy
  has_many :muscle_groups, through: :exercised_muscle_groups

  accepts_nested_attributes_for :muscle_groups
  accepts_nested_attributes_for :exercised_muscle_groups
end

class MuscleGroup < ActiveRecord::Base
  has_many :exercised_muscle_groups 
  has_many :exercises, through: :exercised_muscle_groups

  accepts_nested_attributes_for :exercises
  accepts_nested_attributes_for :exercised_muscle_groups
end

class ExercisedMuscleGroup < ActiveRecord::Base
  belongs_to :exercise
  belongs_to :muscle_group
end

这是我到目前为止对于new和create的控制器操作所拥有的:

def new
   @exercise = Exercise.new
   @exercise.exercised_muscle_groups.build
end

def create
   @exercise = Exercise.new(exercise_params)
   #exercise.save 
   #then loop through all muscle groups marked as primary and then create a record for each one with value of "primary" for used_as column
   #then loop through all muscle groups marked as secondary and then create a record for each one with value of "secondary" for used_as column
   #if all saves are successful, then redirect to show page for that exercise
   #if any save unsuccessful, then redirect to new page with error message
end

这是我在视图中对表单所拥有的内容。我知道这是错的,它不起作用。

<%=form_for(@exercise) do |exercise_form| %>
    <%= exercise_form.label :name %>
    <%= exercise_form.text_field :name, class: 'text_field' %><br>

    <div class="col-xs-12">
    <% exercise_form.fields_for :exercised_muscle_groups do |muscle_group_form| %>

        <%= muscle_group_form.label :primary %>
        </div>
          <% MuscleGroup.all.each do |muscle_group| %>
          <div class="col-xs-6">
              <span class="col-xs-3">
               <%= check_box_tag "exercise[muscle_group_ids][]", muscle_group.id %>
              </span>
              <span class="col-xs-3">
                <%= muscle_group.name %>
              </span>
          </div>
        <% end %>

      <div class="col-xs-12">
        <%= muscle_group_form.label :secondary %>
      </div>
      <% MuscleGroup.all.each do |muscle_group| %>
          <div class="col-xs-6">
              <span class="col-xs-3">
               <%= check_box_tag "exercise[muscle_group_ids][]", muscle_group.id %>
              </span>
              <span class="col-xs-3">
                <%= muscle_group.name %>
              </span>
          </div>
      <% end %>

    <% end %>
  <%= exercise_form.submit "Submit", class: "btn btn-lg btn-primary" %>
<% end %>

如何设置练习和控制器动作的表单?我是不是太复杂了?有更简单的方法吗?

非常感谢任何帮助。谢谢!

0 个答案:

没有答案