2011-01-14 4 views
2

Ich habe eine sehr einfache App. Diese App muss nur prüfen, ob ein Benutzername existiert. Wenn dies der Fall ist, leiten Sie sie an den Benutzer weiter. Wenn es nicht existiert, erstellen Sie einen neuen Benutzer gemäß dem eingegebenen Benutzernamen und leiten Sie ihn an den neuen Benutzer weiter. Neue Benutzer werden nie aus irgendeinem Grund erstellt, aber die Zeile find_or_create funktioniert in der rails-Konsole. Hier ist der Code:find_or_create funktioniert nicht in Rails

user_controller.rb

def new 

    @user = User.new 

    end 


    def create 

    @u = User.find_or_create_by_name(params[:name]) 
    redirect_to @u 

    end 

new.html.erb

<% form_for(@user) do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :Username %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.submit 'Submit' %> 
    </p> 
<% end %> 

Jede Hilfe würde geschätzt.

+0

Sind Sie Fehler in Ihrer Anwendung zu bekommen? Wenn der Benutzer nicht erstellt wird, sollte bei dieser Umleitung ein Fehler auftreten. Wenn dies der Fall ist, sollte beim Speichern in der Datenbank ein Fehler auftreten. Stellen Sie außerdem sicher, dass Ihre Anwendung mit diesem Code ausgeführt wird; Ein Neustart wird alle Zweifel zunichte machen. – coreyward

+1

Ein Name ist alles, was ein Benutzer erstellt werden muss? keine anderen Validierungen? – tokland

Antwort

7

Rails wird die ganze Form innerhalb params[:user] verpacken, so dass Sie wollen wirklich params[:user][:name]

Das heißt:

@u = User.find_or_create_by_name(params[:user][:name])
+0

Jeez, ich habe mich gefragt, ob Params ein Hash sein könnte, aber entschieden, dass es nicht sein würde. Facepalm. Funktioniert wie ein Zauber, danke! – spectro

Verwandte Themen