2

На данный момент я создаю платформу Rails, используя Spree Commerce, где мне нужны две формы регистрации Devise.Показать ошибки проверки для просмотра пользовательской формы для входа в систему

Формы входа в систему по умолчанию уже реализованы. Для второго (на заказ) Придумайте форму, я создал следующий вид:

global_login.html.erb

<div class="inner"> 
    <h2 class="large-margin"> 
    Login 
    </h2> 
    <%= form_for(Spree::User.new, :url => spree_login_path) do |f| %> 
    <%= f.error_messages %> 
    <%= f.email_field :email, {:value => params[:email], :placeholder => 'Email address', :class => 'input'} %> 
    <%= f.password_field :password, {:placeholder => 'Password', :class => 'input'} %> 
    <%= f.submit 'Login', :class => 'submit' %> 
    <% end %> 
</div> 

Этот вид действительно отображает форму входа Разрабатывают. Тем не менее, каждый раз, когда я отправляю форму, меня перенаправляют на представление Devise по умолчанию, где отображаются ошибки проверки.

Кто-нибудь знает решение этой проблемы?

Cheers!

ответ

1

Я нашел обходное решение для этой проблемы. Я добавил параметр в одну из форм с именем «inside_cart». Когда запрос отправляется методу #create, я проверяю, присутствует ли параметр.

Я переписал Шпрее :: UserSessionsController # создать метод следующим образом:

Spree::UserSessionsController.class_eval do 
    layout false 

    def create 
    authenticate_spree_user! 
     if spree_user_signed_in? 
     respond_to do |format| 
      format.html { 
      flash[:success] = Spree.t(:logged_in_succesfully) 
      redirect_back_or_default(after_sign_in_path_for(spree_current_user)) 
      } 
      format.js { 
      user = resource.record 
      render :json => {:ship_address => user.ship_address, :bill_address => user.bill_address}.to_json 
      } 
     end 
     else 
     if params[:spree_user] && params[:spree_user][:inside_cart] 
      flash.now[:error] = t('devise.failure.invalid') 
      render :new, layout: false 
     else 
      flash.now[:error] = t('devise.failure.invalid') 
      render 'spree/users/global_login', layout: 'spree/layouts/spree_application' 
     end 
     end 
    end 
    end