2014-01-23 29 views
0

我试图有一个管理部分,可以在飞行中创建用户。但它似乎总是错误的,从控制台我看到:通过管理界面创建用户似乎试图始终创建ID:1

Started POST "/pressroom/users" for 127.0.0.1 at 2014-01-22 15:56:11 -0800 
Processing by UsersController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"rweuZHlkUJOL0D3GDzBD82pSEk7z+22bZ79Gsyht5Pg=", "user"=>{"email"=>"[email protected]", "username"=>"", "firstname"=>"", "lastname"=>"", "city"=>"", "zip"=>"", "state"=>"", "country"=>"", "role_ids"=>"2"}, "commit"=>"Update"} 
    User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1 
    Role Load (0.5ms) SELECT "roles".* FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 ORDER BY "roles"."id" ASC LIMIT 1 [["user_id", 1]] 
    (0.2ms) BEGIN 
    (0.2ms) ROLLBACK 
    Role Load (0.5ms) SELECT "roles".* FROM "roles" 
    Rendered users/_form.html.erb (14.1ms) 
    Rendered users/new.html.erb within layouts/pressroom (15.3ms) 
    Rendered pressroom/_presstools.html.erb (1.0ms) 
    Rendered pressroom/_header.html.erb (0.5ms) 
    Rendered pressroom/_footer.html.erb (0.3ms) 
Completed 200 OK in 50ms (Views: 38.5ms | ActiveRecord: 2.0ms) 

不知道为什么它的失败,但它看起来像user_id是始终为1,这将是错误的,因为我已经有2个用户的分贝user_id 1和2.错误是ROLLBACK。以下是本节的路线。

get 'pressroom/accounts/new' => 'users#new', :as => :admin_new_user 
post 'pressroom/accounts/new' => 'users#create' 

和users_controller我的新创建函数:

def new 
    @user = User.new 
end 

def update 
    @user = User.find(params[:id]) 

    if @user.update_attributes(user_params) 
     redirect_to users_admin_path, :notice => "User updated." 
    else 
     redirect_to users_admin_path, :alert => "Unable to update user." 
    end 
    end 

def create 
    @user = User.new(params[:user_params]) 

    if @user.save 
     redirect_to users_admin_path, notice: 'User was successfully created.' 
    else 
     redirect_to users_admin_path, :alert => "Unable to create user." 
    end 
    end 

这里是我的形式进行调用:

<div class="panel-body"> 

    <%= simple_form_for(@user) do |f| %> 
     <%= devise_error_messages! %> 

     <div class="form-group"> 
     <%= f.label :email %> 
     <%= f.email_field :email, class: "form-control", :autofocus => true %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :username %> 
     <%= f.text_field :username, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :firstname %> 
     <%= f.text_field :firstname, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :lastname %> 
     <%= f.text_field :lastname, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :city %> 
     <%= f.text_field :city, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :zip %> 
     <%= f.text_field :zip, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :state %> 
     <%= f.text_field :state, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :country %> 
     <%= f.text_field :country, class: "form-control" %> 
     </div> 

     <h3>Change Role</h3> 
     <%= f.input :role_ids, :collection => Role.all, :as => :radio_buttons, :label_method => lambda {|t| t.name.titleize}, :label => false, :item_wrapper_class => 'inline', checked: @user.role_ids.first %> 

     <div class="form-group"> 
     <%= f.submit "Update", class: "btn btn-primary" %> 
     </div> 
    <% end %> 
    </div> 
+0

你做错了什么,但没有看到你的代码是不可能说*什么*。此外,你正在谈论一个错误,但我没有看到任何地方的错误。 – Mischa

+0

我已经添加了一些代码,对此感到抱歉。 –

+0

你发布了'update'动作。你的“创造”行为是什么样子的? – Mischa

回答

1

你可以从你的日志中看到,该用户参数在params[:user]

"user"=>{"email"=>"[email protected]", # Etc. 

但在您的create行动中您使用的是params[:user_params],即nil。因此没有用户被创建。

显然你使用的是Strong Parameters,你从方法中返回允许的参数。在这种情况下,你应该通过这样的方法:

User.new(user_params) 
+0

这样做会给我一个'@user = User.new(params [:user])上的ActiveModel :: ForbiddenAttributesError''''''''''''''''''我在我的用户控制器的底部有以下内容:'def user_params params.require(:user) (:username,:email,:password,:salt,:encrypted_pa​​ssword,:role_ids,:firstname,:lastname,:city,:zip,:state,:country) end' –

+0

Then you should'User.new user_params)',而不是'User.new(params [:user_params])'。 – Mischa

+0

使用仍然失败,我已经添加我的表单只是为了看看我是否犯了一个错误。 –