2013-07-17 1 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

У меня есть модель пользователя с параметром даты истечения срока действия, которую я бы хотел установить только администраторами. Там нет никакого способа постепенного добавления параметров в список разрешений ... так что вы должны разорвать DRY и сделать это так ...

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 

 Смежные вопросы

  • Нет связанных вопросов^_^