В моем проекте есть ресурс, который собирает некоторую информацию от пользователя.По сути, это форма, которую они заполняют, прежде чем они смогут получить доступ к другой области сайта.Затем он устанавливает файл cookie на неделю, но если они возвращаются, он просматривает свою предыдущую запись и сохраняет свои предпочтения, связанные с ними (и обновляет любые данные, если адрес электронной почты совпадает).У меня есть контроллер Applicants, который выглядит следующим образом:
class ApplicantsController < ApplicationController
...
def create
@applicant = Applicant.find_or_initialize_by_email(params[:applicant])
if @applicant.new_record? ? @applicant.save : @applicant.update_attributes(params[:applicant])
set_cookie_and_redirect
else
render 'new'
end
end
def update
if @applicant.update_attributes(params[:applicant])
set_cookie_and_redirect
else
render 'new'
end
end
end
set_cookie_and_redirect - это закрытый метод, который просто устанавливает некоторые файлы cookie и перенаправляет пользователя на страницу.Код работает, но он просто кажется грязным .По сути, это обновление записи в методе create при условии, что это не новая запись.Я также вынужден иметь метод обновления в случае, если существующая запись возвращается с ошибкой проверки - помощник формы затем переключит форму на отправку методу обновления.
Так что, на мой взгляд... есть ли более подходящий способ передать вызов update_attributes в методе create в метод update?Или, проще говоря, есть ли лучший способ уважать методы RESTful в изоляции функциональности создания и обновления?
ОБНОВЛЕНИЕ: Я тоже хотел быть немного более конкретным.Если пользователь заполнил эту форму до того, как он установит файл cookie, ему не нужно будет заполнять ее снова в течение семи дней.Однако через семь дней срок действия файла cookie истек, и они снова видят форму.Контроллер не знает, является ли пользователь новым или существующим, пока не добавит пользовательский ввод в форму, которая затем сравнивается на основе адреса электронной почты.
Заранее спасибо!Я определенно жду чьих-либо мыслей по этому поводу.