我有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
有更简单的方法吗?
答案 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