2013-08-28 52 views
1

我試圖做一個基本形式創建用戶記錄:軌道4的form_for錯誤:未定義的方法`MODEL_NAME」爲的ActionController ::參數:

<%= debug(@user) %> 
<%= form_for @user, url: {action: "create_user"}, html: {class: "user-create-form"} do |f| %> 
    <div class="form-group"><%= f.text_field :first_name, class:'form-control' %></div> 
    <div class="form-group"><%= f.text_field :last_name, class:'form-control' %></div> 
    <div class="form-group"><%= f.text_field :email, class:'form-control' %></div> 
    <div class="form-group"><%= f.text_field :password, class:'form-control' %></div> 
    <%= f.submit "Update" %> 
<% end %> 

在控制器:

def create_user 
    @user = params[:user] 
    @user = User.new if [email protected] 
    end 

此加載罰款,並沒有錯誤,但是當我提交表單,我得到以下錯誤:

NoMethodError in Admin#create_user 

Showing /Applications/MAMP/htdocs/clippo2/app/views/admin/create_user.html.erb where line #6 raised: 

undefined method `model_name' for ActionController::Parameters:Class 

Extracted source (around line #6): 
    <%= form_for @user, url: {action: "create_user"}, html: {class: "user-create-form"} do |f| %> 

這裏是我的[R歐特斯:

get "admin", to: "admin#index" 
    get "admin/edit_user/:id", to: "admin#edit_user" 
    patch "admin/edit_user/:id", to: "admin#edit_user" 
    get "admin/create_user" 
    post "admin/create_user" 
    get "admin/delete_user" 
    get "access/login" 
    get "access/logout" 
    post "access/attempt_login" 

    root :to => 'pages#home' 
+0

你可以粘貼你的路線代碼。 –

+0

只是將它們添加到問題 – emersonthis

+1

嘗試在您的視圖中更改'@ user'到':user'(即'form_for:user(...)' – zrl3dx

回答

1
Extracted source (around line #6): 
    <%= form_for @user, url: {action: "create_user"}, html: {class: "user-create-form"} do |f| %> 

form_for接受ActiveRecord類的對象。但是您在create_user操作中在控制器中犯了錯誤。

@user變量create_user由於您正在爲其分配params[:user]散列,因此動作不是active_record的對象。

更改您這樣的代碼:

def create_user 
    @user = User.new 
end 
+0

工作正常!但是我不得不在user.new(params [:user])'中對用戶強壯的參數進行一次修改而不是params [:user]'。是否我的錯誤是針對Rails 4?2的。是否有必要檢查params && params [:user]?後者是否需要前者? – emersonthis

+0

1. Rails 4具體只是強大的參數,而不是代碼。2.您可以避免第一個,我將編輯答案但爲什麼你需要檢查params [:user],你是否也通過其他的形式向這個動作發送請求(任何檢查參數的特殊原因)? –

+0

@AmanGarg看到我的答案,他錯誤地將'create_user'設置爲'get'和'post',當他應該使用'get new_use r','post create_user'。 –

0

create_user要求params[:user']才能運作,因此沒有必要檢查PARAMS。一個簡單的修改:

def create_user 
    @user = User.new(params[:user]) 
end 

爲什麼你會通過User.new如果參數不存在? create_user應該是郵政唯一路線。您需要User.new(params[:user]),因爲如果驗證失敗,您會將該對象傳遞迴帶有錯誤和現有輸入的表單。

這裏更改路線:

get "admin/create_user" => get "admin/new_user" 

然後創建在您的控制器的新方法new_user

def new_user 
    @user = User.new 
end 

你也建立在錯誤的道路的路線。使用資源:

namespace :admin do 
    resources :user 
end 

請參閱this guide瞭解更多信息。

相關問題