使用collection_select创建HABTM关系中的多个记录 - Rails

时间:2013-04-19 14:47:16

标签: ruby-on-rails has-and-belongs-to-many

我在训练和小组之间有has_and_belongs_to_many的关系。

我在群组中有一个collection_select我正用于向群组添加锻炼。

问题是我只能更改HABTM表中的一条记录,所以我只能添加一条记录,然后编辑该记录。如何添加其他记录?

有什么想法吗?

以下是一些代码:

show.html.erb:

<%= form_for(@group) do |f| %>
  <%= f.collection_select 'workout_ids', Workout.all, :id, :name, { :include_blank => ""} %>

  <%= f.submit %>
<% end %>

class Workout < ActiveRecord::Base
  attr_accessible :name, :exercises_attributes, :workout_exercises_attributes, :group_ids

  has_and_belongs_to_many :groups

class Group < ActiveRecord::Base
  attr_accessible :cycle_id, :name, :next_group_id, :previous_group_id, :workout_ids

  has_and_belongs_to_many :workouts

1 个答案:

答案 0 :(得分:1)

所以答案是用控制器编辑控制器中的更新操作:

workout_id = params[:group].delete(:workout_ids)

    # Adding a workout
    if workout_id
      workout = Workout.find(workout_id)
      @group.workouts << workout
    end

上面的代码创建了一个局部变量workout_id,它从:group中获取参数:workout_id:group .delete方法删除了第二个参数以进行更新例如,更改组名称时的实际组。

然后,我们只需将新的训练推送到@ group.workouts,每次我们从集合选择中向组添加新的训练时,在联接表中创建新记录。