我们正在创建一个计划应用程序,并尝试为每个星期的计划创建一个复制/粘贴功能。我试图弄清楚如何在特定时间段内重复计划,同时在粘贴时更新属性。现在,我可以复制日程安排,但是在邮递员上运行日程时,日期和时间保持完全相同(如我们期望的那样,使用.dup。)我相信最好将开始/结束时间设置为nil和然后粘贴时属性可能会在那时更新?
这是我到目前为止拥有的功能:
def copy
set_calendar
if params["start_date"] && params["end_date"]
start_date = params["start_date"].to_date
end_date = params["end_date"].to_date
if @calendar.users.owners.include?(current_user) || @calendar.users.managers.include?(current_user)
@past_shifts = Shift.where(calendar_id: @calendar.id, start_time: start_date.beginning_of_day .. end_date.end_of_day).to_a
if
@past_shifts.each do |past_shift|
shift = past_shift.dup
shift.users = past_shift.users
shift.update(shift_params)
shift.save
end
render json: "copied", status: :ok
else
render json: @usershift.errors, status: :uprocessable_entity
end
else
render json: ("You do not have access to copy shifts"), status: :unauthorized
end
end
end
shift.update(shift_params)是需要更新开始时间和结束时间的部分。这是轮班参数:
def shift_params
params.permit(:start_time, :end_time, :calendar_id, :capacity, :published)
end
就关系建立而言,此当前方法是在班次控制器中创建的。 Shift通过用户转移有很多用户,用户通过用户转移有很多转移,并且usershift模型属于两者。
答案 0 :(得分:0)
很好奇-您确定params
方法的copy
包含start_time
和end_time
的值吗?如果是这样,为什么不直接使用它们:
shift.start_time = params['start_time']
shift.end_time = params['end_time']
使用shift_params
,您还将更新其他3个属性::calendar_id, :capacity, :published
。不知道在这种情况下是否有必要。
在这种情况下,使用shift.update
方法是不合理的。它与现有记录一起使用,并将更新的属性保存到数据库中。对于您而言,该记录是新记录,您可以稍后再调用shift.save
保存所有更改。