2014-04-17 38 views
1

我在模型創建中失敗了一個非空條件,我想,謝謝使用強參數從我的params散列中刪除東西。Rspec強參數剝離參數

Rspec的代碼:

it "creates a new Provider" do 
    expect { 
     post :create, {:admin_provider => {:name => "foo bar"}}, valid_session 
    }.to change(Provider, :count).by(1) 
end 

控制器代碼:

def create 
    @admin_provider = Provider.new(okay_params) 

    respond_to do |format| 
    ...Render Views 
    end 
end 

def okay_params 
    params.permit(:admin_provider).permit(:name) 
end 

輸出:

Admin::ProvidersController POST create with valid params creates a new Provider 
Failure/Error: post :create, {:admin_provider => {:name => "foo bar"}}, valid_session 
ActiveRecord::StatementInvalid: 
    PG::NotNullViolation: ERROR: null value in column "name" violates not-null constraint 
    DETAIL: Failing row contains (225, null, null, null, t, null, null, null, null, null, null, null, null). 
    : INSERT INTO "providers" DEFAULT VALUES RETURNING "id" 

發生了什麼事我PARAMS剝離出來的 「名」 參數?我試過它作爲一個符號和一個字符串。我試過它作爲let塊而不是硬編碼。沒有不同。每一次它似乎都在剝離我的參數。我錯過了什麼?

+1

'params.require(:admin_provider).permit(:名稱)' – depa

回答

0

更新您的okay_params定義:

# app/controllers/providers_controller.rb 

def okay_params 
    params.require(:admin_provider).permit(:name) 
end 

那麼你的天賦:

it "creates a new Provider" do 
    expect { 
     post :create, {:admin_provider => {:name => "foo bar"}}, valid_session 
    }.to change(Provider, :count).by(1) 
end 
+0

你能解釋一下爲什麼PARAMS .require的表現與params.permit不同嗎? – ABMagil

+0

@ABMagil,它們是兩種不同的功能。請參閱:http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html – vee