Как обновить атрибуты при дублировании Rails - PullRequest
0 голосов
/ 09 октября 2018

Мы создаем приложение для планирования и пытаемся создать функцию копирования / вставки для расписаний от недели к неделе.Я пытаюсь выяснить, как дублировать расписание на определенный период времени при обновлении атрибутов при вставке.Прямо сейчас я могу скопировать расписание, но при запуске его на почтальоне, даты и время остаются такими же (как и следовало ожидать с .dup.) Я считаю, что было бы лучше установить время начала / окончания на ноль изатем при вставке может быть обновлены атрибуты в то время?

Вот функция, которую я имею до сих пор:

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

Что касается установления отношений, этот текущий метод создается в контроллере сдвигов.У смены много пользователей за смену пользователей, у пользователя много смен за смены пользователей, и модель смены пользователей принадлежит обоим.

1 Ответ

0 голосов
/ 09 октября 2018

Просто любопытно - вы уверены, что 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 позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...