2010-12-28 7 views
4

Ich benutze Rails 3, auf Ruby 1.8.7. Und für auth verwenden. entwickeln (1.1.3). Aber es ist eine ziemlich große Community-Site, die ich baue, also habe ich eine Tabelle für Profile und eine Tabelle für Benutzer. Und jedes Mal, wenn ein Benutzer registriert sollte es auch ein Profil erzeugen, aber in devise ich bin die Controller nicht erlaubt, so bin ich völlig verloren ..Devise Controller Schienen

bearbeiten

Jetzt heißt es

undefined method `getlocal' for Tue, 28 Dec 2010 11:18:55 +0000:DateTime 

Dann, wenn ich eine Datei in lib mit diesem Code aufgerufen machen date_time.rb

class DateTime 
    def getlocal 
    "it works" 
    end 
end 

und erfordern es in meinem Application Controller i t gibt mir diese

fail wrong number of arguments (1 for 0) 

es ist wie es wissen nichts devise genannt mehr, aber in meiner Routen habe ich

devise_for :users 
+0

Es gibt einen Kommentar zu einem ‚getLocal‘ bezieht, ist Fehler auf den Devise-Seiten: https://github.com/plataformatec/devise/issues/issue/240#issue/240/comment/532309 Vielleicht wurde ein Datensatz beschädigt - versuchen Sie vielleicht einen db: reset, um Ihre Daten zu löschen? – Scott

+0

Omg ich kann nicht glauben, dass das alles war .... Danke, vielen Dank! –

+0

In aller Ehrlichkeit - es war eine Vermutung ... aber danke! – Scott

Antwort

15

ersinnen Sie können die Devise RegistrationsController Unterklasse und Ihre eigene Logik hinzufügen in der create() -Methode und rufen Sie die übergeordneten Klassenmethoden für alles andere auf.

class MyRegistrationsController < Devise::RegistrationsController 
    prepend_view_path "app/views/devise" 

    def create 
    super 
    # Generate your profile here 
    # ... 
    end 

    def update 
    super 
    end 
end 

Wenn Sie die Devise Ansichten anpassen, die in der Gem verpackt sind, dann können Sie den folgenden Befehl ausführen, um die View-Dateien für Ihre Anwendung zu generieren:

rails generate devise:views 

Sie auch sagen müssen der Router, um Ihren neuen Controller zu verwenden; etwas wie:

devise_for :users, :controllers => { :registrations => "my_registrations" } 
+0

Mit dem könnte ich dann einfach super auf alles und dann mein eigenes machen? oder. –

+1

Ich denke, Sie sollten Ihre eigenen Sachen machen und dann super anrufen – codevoice

+0

Ich habe den Anruf zu super in update() hinzugefügt, um Sie daran zu erinnern, es als angemessen zu nennen. Eigentlich sollte man super auch in create() aufrufen. Ich füge das zu meinem Beispiel hinzu. – Scott

6

Es ist nicht wirklich notwendig, den Controller in diesem zu beteiligen; Modelle können (und sollten) das ganze schwere Heben hier machen.

Ich gehe davon aus, dass Sie eine Beziehung zwischen User und Profile Modellen haben, wobei in diesem Fall sollten Sie nur in der Lage sein, so etwas zu tun:

class User < ActiveRecord::Base 
    has_one :profile # could be a belongs_to, but has_one makes more sense 

    after_create :create_user_profile 

    def create_user_profile 
    create_profile(:column => 'value', ...) 
    end 
end