2014-01-15 54 views
1

我不明白爲什麼permit_params不能使用自定義創建操作。permit_params不適用於自定義創建操作

例如讓我們拿基本的AdminUser資源。

默認情況下,所有工作正常。我們有:

ActiveAdmin.register AdminUser do 
    permit_params :email, :password, :password_confirmation 

    form do |f| 
    f.inputs "Admin Details" do 
     f.input :email 
     f.input :password 
     f.input :password_confirmation 
    end 
    f.actions 
    end 
end 

但是,儘快我們添加自定義創建由於某些原因permit_params將不再工作。

ActiveAdmin.register AdminUser do 
    permit_params :email, :password, :password_confirmation 

    form do |f| 
    f.inputs "Admin Details" do 
     f.input :email 
     f.input :password 
     f.input :password_confirmation 
    end 
    f.actions 
    end 

    controller do 
    def create 
     AdminUser.create(params[:admin_user]) 
     do_some_magic_stuff_here 
     redirect_to backend_admin_users_path, notice: 'Custom create' 
    end 
    end 
end 

我遇到錯誤 「::加載ActiveModel ForbiddenAttributesError」 一致 「AdminUser.create(PARAMS [:admin_user])」

試了很多可能的解決方案,只有一個爲我工作,但我真不」 t等這樣的:

def create 
    AdminUser.create(params[:admin_user].permit(:email, :password, :password_confirmation)) 
    do_some_magic_stuff_here 
    redirect_to admin_admin_users_path, notice: 'Custom create' 
end 

我不明白爲什麼我不能去上班默認的方式,因爲它應該工作:

def admin_user_params 
    params.require(:admin_user).permit(:email, :password, :password_confirmation) 
end 

有人可以解釋我,請問這裏發生了什麼?使用permit_params進行自定義操作的好方法是什麼?

回答

2

permit_params只是AA DSL的一部分,定義了一種名爲permitted_params的方法,該方法又由創建和更新操作調用。試試這個:

permit_params :email, :password, :password_confirmation 

controller do 
    def create 
    @admin_user = AdminUser.create(permitted_params) 
    do_some_magic_stuff_here 
    redirect_to backend_admin_users_path, notice: "Custom create" 
    end 
end 

permit_params實際上只是一箇舊的形式更簡單,但是實現強大的參數仍然有效的方法:

controller do 
    def permitted_params 
    params.permit admin_user: [:email, :password, :password_confirmation] 
    end 
end 
0

了同樣的問題在這裏掙扎。最奇怪的是,它可以在nitrous.io盒子上運行,但在我的生產服務器上卻沒有。我檢查過,我使用的是相同的rails 4.2.0版本。

關注 Fak

相關問題