2011-01-14 14 views
2

私は非常に簡単なアプリケーションを持っています。このアプリケーションが必要とするのは、ユーザー名が存在するかどうかを確認することだけです。もしそうなら、ユーザーにリダイレクトしてください。存在しない場合は、入力したユーザー名に応じて新しいユーザーを作成し、新しいユーザーにリダイレクトします。新しいユーザは何らかの理由で作成されることはありませんが、find_or_create行はrails consoleで動作します。ここでは、コードは次のようになります。find_or_createが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 %> 

任意の助けをいただければ幸いです。

+0

は、あなたのアプリケーション内のすべてのエラーを取得していますか?ユーザーを作成していない場合は、そのリダイレクトでエラーが発生するはずです。そうであれば、データベースへの保存に失敗したときにエラーが発生するはずです。また、アプリケーションがこのコードを実行して実行されていることを確認してください。再起動すると疑問が解消されます。 – coreyward

+1

名前はすべてユーザーが作成する必要がありますか?その他のバリデーションはありませんか? – tokland

答えて

7

Railsはparams[:user]以内にフォーム全体をパッケージ化しようとしているので、つまり、あなたは本当にparams[:user][:name]

をしたい:

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

ええ、私はparamsがハッシュかもしれないが、そうでないと決めたのかしらと思っていました。 Facepalm。魅力のように動作します、ありがとう! – spectro

関連する問題