Rails - 在连接表中使用其他参数构建相关记录

时间:2015-04-27 16:41:40

标签: ruby-on-rails ruby-on-rails-4 has-many-through

我有has_many_through关系:

class Schedule < ActiveRecord::Base
    has_many :schedule_tasks
    has_many :tasks, :through => :schedule_tasks

class Task < ActiveRecord::Base
    has_many :schedule_tasks
    has_many :schedules, :through => :schedule_tasks

当我创建记录时,创建的连接表(schedule_tasks)记录仅填充最小的字段以进行连接,在本例中为:schedule_id和:task_id,我需要一个额外的字段 - : day_id也已填充(此字段也在Task模型中,但现在我需要这样做:

def create
    @schedule = Schedule.find(task_params['schedule_id'])
    @task = @schedule.tasks.create(task_params)
    @schedule_task = @schedule.schedule_tasks.where(task_id: @task.id, schedule_id: @schedule.id).first
    @schedule_task.day_id = @task.day_id
    @schedule_task.save
    redirect_to @schedule
end

有更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

我通常远离callbacks,因为它们会导致非常混乱的意大利面条逻辑,但这似乎是一个不错的用例。

class ScheduleTask < ActiveRecord::Base
  belongs_to :task
  belongs_to :schedule

  before_save :set_day_id

  def set_day_id
    self.day_id = task.day_id
  end  
end