0

私は簡単なサインアップフォームを持っています:

<h1>Signup as a new user</h1>

<%= form_for(@user) do |f| %>
  <p>
    <%= f.label :username %>
    <%= f.text_field :username %>
  </p>
  <p>
    <%= f.label :password %>
    <%= f.password_field :password %>
  </p>
  <p>
    <%= f.submit "Save" %>
  </p>
<% end %>

これは、UsersController の create メソッドにリダイレクトされます。

def create
  password  = params[:password].crypt("$1$}")
  @user = User.new(:username => params[:username], :password => password)
  @user.save
  flash[:message] = "User #{User.username} created!"
  redirect_to user_path(@user)
end

しかし、これはエラーをスローしますundefined method crypt' for nil:NilClass。パスワードが Nil になるのはなぜですか? HTMLパラメーターを確認したところ、次のようになりました。

Parameters: {"utf8"=>"✓", "authenticity_token"=>"aAcaURTLKfwmXULEUzLX36tZAKER/kMxKKOROOXgoU8=", "user"=>{"username"=>"Chris", "password"=>"[FILTERED]"}, "commit"=>"Save"}

"[FILTERED}"文字列ではないということですか?からどのようにアクセスできますparamsか?

4

1 に答える 1

2

nil ではなく、:user 内に存在するだけなので、試してみてください

params[:user][:password].crypt("$1$")

実際、ここでのすべてのパラメーターの動作は正しくありません。すべてのフィールドは :user によってスコープされています。これは、form_for が自動的に行うことの 1 つです。

したがって、ユーザー名を取得するには、params[:user][:username].

于 2012-02-27T20:41:26.107 に答える