Devise - сообщение об ошибке не отображается - перенаправляет на обновление вместо создания - PullRequest
0 голосов
/ 21 июля 2011

Я переписал контроллер регистрации и пытаюсь вернуться в форму, чтобы создать пользователя, но он работает только частично.

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"}

Так почему отправка сообщения будет направлена ​​на обновление? И как я могу это исправить?

Обновление: Хорошо, значит, оно перенаправляется на обновление (я считаю), поскольку ресурс определяется как существующий объект. Но поскольку у меня есть собственная стратегия разработки, в которой говорится, что этот конкретный пользователь не прошел проверку подлинности, он не может перейти к обновлению (которое требует проверки подлинности) и перенаправляется на новое, но без параметров.

Таким образом, возникает вопрос, как мне настроить ресурс, чтобы он выглядел как новый пользователь, но имел ошибки, которые были у него до создания нового пользователя.

Например, ошибкой может быть «Пароли не совпадают», но если вы обнаружите ошибки у нового пользователя, это будет «Электронная почта уже занята».

Ответы [ 2 ]

4 голосов
/ 21 июля 2011

РЕДАКТИРОВАТЬ 1: Я пропустил некоторые ваши вопросы, это может быть бесполезно.

Убедитесь, что вы используете что-то подобное для отображения на своей странице:

layouts / application.html.erb (или где вам это нужно)

<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
0 голосов
/ 21 июля 2011

Мне не нравится это, но это работает. Если у кого-то есть лучший способ сделать это, пожалуйста, дайте мне знать. Спасибо.

...
else
  resource.unregistered_advisor = true
  clean_up_passwords(resource)
  a = User.new(:email => resource.email, :name => resource.name, :confirmation_token => resource.confirmation_token)
  resource.errors.each do |key,value|
    a.errors[key] = value
  end
  self.resource = a
  respond_with_navigational(resource) { render_with_scope :new }
end
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...