Я переписал контроллер регистрации и пытаюсь вернуться в форму, чтобы создать пользователя, но он работает только частично.
def create
u = User.find_by_email(params[:user][:email])
...
if u && u.unregistered
self.resource = u
if resource.update_with_password(params[resource_name])
...
set_flash_message :notice, :updated if is_navigational_format?
...
sign_in(resource_name, resource)
if u.confirmed?
redirect_to consultations_path
else
redirect_to send_advisor_confirmation_path(u.id)
end
else
clean_up_passwords(resource)
# this is the place that has a problem
respond_with_navigational(resource) { render_with_scope :new }
end
return
end
super
end
(примечание: в моем приложении можно создать пользователя, который еще не вошел в систему, он определен как «незарегистрированный», и он может запросить свою учетную запись, пройдя процедуру регистрации).
Этот response_with_navigational работает в первый раз (когда new
отправляет create
), но затем, когда вы снова запутываете форму, он очищает всю форму (когда create
отправляет create
... или должно быть). Журналы говорят, что в первый раз он собирается создать, но во второй раз он собирается обновить:
Started POST "/users" for 127.0.0.1 at 2011-07-20 15:49:30 -0500
Processing by RegistrationsController#create as HTML
...
Started POST "/users" for 127.0.0.1 at 2011-07-20 15:50:56 -0500
Processing by RegistrationsController#update as HTML
По маршрутам (рейковые маршруты):
POST /users(.:format) {:action=>"create", :controller=>"users"}
new_user GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
PUT /users/:id(.:format) {:action=>"update", :controller=>"users"}
Так почему отправка сообщения будет направлена на обновление? И как я могу это исправить?
Обновление: Хорошо, значит, оно перенаправляется на обновление (я считаю), поскольку ресурс определяется как существующий объект. Но поскольку у меня есть собственная стратегия разработки, в которой говорится, что этот конкретный пользователь не прошел проверку подлинности, он не может перейти к обновлению (которое требует проверки подлинности) и перенаправляется на новое, но без параметров.
Таким образом, возникает вопрос, как мне настроить ресурс, чтобы он выглядел как новый пользователь, но имел ошибки, которые были у него до создания нового пользователя.
Например, ошибкой может быть «Пароли не совпадают», но если вы обнаружите ошибки у нового пользователя, это будет «Электронная почта уже занята».