2013-07-17 36 views
2

有誰知道,如果與strong_parameters寶石,我們就可以逐步添加屬性象下面這樣:Rails的強大的參數增量此外

def user_params 
    params[:user].permit(:name, :email) 

    if current_user.admin? 
    params[:user].permit(:is_admin) 
    end 
end 

在這裏,我逐漸要求的代碼允許:is_admin參數如果當前用戶是管理員。不應該只是添加到先前允許的參數列表中(:name:email)?

回答

1

他們的方式我這樣做是把我的所有PARAMS類像強參數railscast ..

這樣,我有這樣的事情

class PermittedParams < Struct.new(:params,:admin) 

    def administrator_attributes 
     allowed = [:email, :name, :password, :password_confirmation, :password_digest] 
    if admin.has_any_role? :realm_admin, :system_admin 
     allowed << :active << :roles 
    end 
    allowed 
    end 

    .... other models .... 



    def method_missing(method,*args,&block) 
    attributes_name = method.to_s + '_attributes' 
    if respond_to? attributes_name, false 
     params.require(method).send(:permit, *method(attributes_name).call) 
    else 
     super 
    end 
    end 
end 

然後在控制器只需要調用@administrator.update_attributes(permitted_params.administrator)

,因爲它只是一個你可以建立數組,然後用*將它傳入許可證。

0

這是一個有趣的問題。我不確定,但是在這種情況下我的直覺反應只是測試它。無論是否打破,你都會得到你的答案。

+0

它不工作,我已經測試了:(。想知道如果我做錯了什麼。 –

0

我有一個帶有過期日期參數的用戶模型,我只希望管理員能夠設置。有沒有辦法來逐步參數添加到允許列表...所以你必須打破幹,做這樣的......

if can? :manage, :all 
    params.require(:user).permit(:first_name, :last_name, :email, :expiration_date) 
else 
    params.require(:user).permit(:first_name, :last_name, :email) 
end