2011-05-23 18 views
10

Devise'yi uygulamanıza entegre etmeye çalışıyorum. Sayfanın üst kısmındaki oturum açma formuna ihtiyacım var (bu formu sayfa haline getirdim) ve kayıt formunu içeren kayıt işlemini uygulamam gerekiyor. Ancak yanlış kayıt verileri göndermeye çalıştığımda her iki form için doğrulama hataları gösteriliyor.Devise. Aynı sayfadaki Kayıt ve Giriş

+0

İlgili görünümleri/denetleyicileri kodu gösterebilir misiniz? Bu dava hakkında –

+0

[Cevabımı buradan kontrol edin] (http://stackoverflow.com/a/17001874/1297435). –

cevap

6

Daha fazla bilgi olmadan sorunun ne olduğunu tahmin etmek zor. Ben, gerçekten yararlı (ve giderek öylesine) olmak üzere Wiki sayfalarını bulundu Zaten sahip olsa onları yere baktım: ihtiyaçlarınıza alakalı olabilir

Devise Wiki Pages

İki sayfaları:

Display a custom sign_in form anywhere in your app

Create custom layouts

Bu yardımcı olur umarız!

- ff

+0

Sorun buldum, Devise'ye bağlı değildi. Her form için nesne adını değiştirdim ve düzgün çalışıyor. –

+1

@VitalyAksionchyk, yaptığınız işi daha ayrıntılı olarak açıklayabilir misiniz? – flynfish

+0

Benim için, basit_form_for ("Kullanıcı", ... "ile" simple_form_for ("kullanıcı") arasındaki değişiklik…. – mirelon

0

Sayfadaki iki formları olmalıdır - kaydolma diğeri kayıt için bir tane. Tek bir form ve birden fazla potansiyel eylem istiyorsanız, istemci tarafını ele alan ve bir kullanıcı veya oturum oluşturmak istediğinize bağlı olarak formun eylemini & yöntemini uygun rotaya geçiren birkaç düğüme gereksinim duyacaksınız.

Bunu daha önce yaptığınızı düşünüyorsanız, sorun kodunuzda yatar. Bizimle paylaşacak olsaydınız belki de gözden kaçırmış olabileceğiniz bir şeye işaret edebiliriz.

3

Her iki form için de doğrulama hatalarını görme sorunu 2 şeyden kaynaklanıyor. İlk olarak, formlar, genel bir 'kaynak' yardımcısı kullanırlar. Bu bir Kullanıcı nesnesi oluşturur ve aynı kullanıcı objesi hem kayıt hem de formdaki imza için kullanılır. İkincisi, düzenleme hataları genellikle 'devise_error_messages!' Kullanılarak görüntülenir. Aynı paylaşılan kaynağı kullanan yardımcı.

Aynı sayfada oturum açmak ve kayıt olmak için her form için farklı kullanıcı nesneleri oluşturmanız ve hata mesajlarını görüntülemenin yeni bir yolu olmanız gerekir.

Öncelikle, (/ app/kontrolörleri/kullanıcılarda) Kendi kayıt denetleyicisi oluşturmak için

class Users::RegistrationsController < Devise::RegistrationsController 
    include DevisePermittedParameters 

    protected 

    def build_resource(hash=nil) 
    super 
    # Create an instance var to use just for the sign up form 
    @sign_up_user = self.resource 
    end 
end 

ihtiyaç Ve güzergahlar olacak buna göre

devise_for :users, controllers: { 
    registrations: 'users/registrations' 
} 

İleri dosyasını güncelleyeceğiz kendi hata mesajlarına ve kaynak yardımcılarına ihtiyacınız var. şöyle formlarınızı sizin görünümlerinde, Nihayet

module DeviseSinglePageHelper 
    def devise_error_messages_for_same_page(given_resource) 
    return "" if given_resource.errors.empty? 

    messages = given_resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join 
    sentence = I18n.t("errors.messages.not_saved", 
         count: given_resource.errors.count, 
         resource: given_resource.class.model_name.human.downcase) 

    html = <<-HTML 
    <div id="error_explanation"> 
    <h2>#{sentence}</h2> 
    <ul>#{messages}</ul> 
    </div> 
    HTML 

    html.html_safe 
    end 

    def sign_up_user 
    @sign_up_user ||= User.new(username: 'su') 
    end 

    def sign_in_user 
    @sign_in_user ||= User.new(username: 'si') 
    end 
end 

, güncellemek: devise_single_page_helper.rb gibi yeni bir yardımcı oluşturun ve aşağıdakileri ekleyin

-# The sign up form 
    = simple_form_for(sign_up_user, url: registration_path(resource_name)) do |f| 
    -#... 
    = devise_error_messages_for_same_page(sign_up_user) 


    -# The sign in form 
    = simple_form_for(sign_in_user, url: sessions_path(resource_name)) do |f| 
    #... 
    = devise_error_messages_for_same_page(sign_in_user) 

Bütün bunlar bir araya size 2 farklı nesneleri verir - 1 Kayıt için 1 ve oturum açmak için 1. Bu, hata mesajlarının diğerinde gösterilmesini engelleyecektir.Her iki formun da sayfadaki (ve muhtemelen varsayılan kayıt sayfası sayfanın giriş sayfasına yönlendirilmesi) formları doldurmanızı öneriyoruz çünkü varsayılan olarak başarısız bir giriş denemesi, sayfaya giriş sayfasına yönlendirilecektir.

İlgili konular