0

これが私が得ている例外です:

ActiveRecord::RecordInvalid in UsersController#create
Validation failed: Email can't be blank, Password can't be blank

ただし、パラメーターは正しく取得されているようです。

リクエスト

Parameters

    {"utf8"=>"✓",
     "authenticity_token"=>"l4gsQ/dO9+482Yf1Eq+MBSEVT9zcG4XdN37h1ZhnEIM=",
     "user"=>{"email"=>"d@email.com",
     "password"=>"[FILTERED]",
     "password_confirmation"=>"[FILTERED]",
     "username"=>"studentd",
     "teacher"=>"Example"},
     "commit"=>"Sign up",
     "format"=>"user"}

createこれが UsersController の私のメソッドです。私はDevise認証に使用していますが、主に理解しやすかったため、まだ UsersController を持っています。

def create
    @user = User.create(:email => params[:email], :password => params[:password], 
      :password_confirmation => params[:password_confirmation], :username => params[:username],
      :teacher => params[:teacher], :role => "student")
    @user.save!
end

保存することになっていることはわかってcreateいますが、明示的に呼び出さないと、 User モデルはデータベースに保存されません。

最後に、データを取得しようとしているフォームを次に示します。ここでの使用例は、adminユーザーがこれを使用してサインアップすることstudentsです。

<h2>Sign up</h2>

<%= form_for(resource, :as => resource_name, :url => user_registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :email %><br />
  <%= f.email_field :email, :autofocus => true %></div>

  <div><%= f.label :password %><br />
  <%= f.password_field :password %></div>

  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></div>

  <div><%= f.label :username %><br />
  <%= f.text_field :username %></div>

  <div><%= f.label :teacher %><br />
  <%= f.text_field :teacher %></div>

  <div><%= f.submit "Sign up" %></div>
<% end %>
4

1 に答える 1

1

ハッシュに気付いた場合:params、ユーザー フォーム自体がキーの下のハッシュとして送信されていることがわかりuserます。

実際params[:email]には空です。あなたはやっているはずですparams[:user][:email]

さらに、コントローラーのアクションをさらに単純にすることができます。

def create
   @user = User.create(params[:user])
   @user.role = "student"
   @user.save!
end
于 2013-04-29T01:14:15.240 に答える