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应该为您保存,但如果我没有明确调用它,则用户模型不会保存到数据库中。

最后,这是我试图从中获取数据的表格。这里的用例是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 回答