2012-01-21 8 views
5

tengo algo como:cómo especificar campos establecer para accepts_nested_attributes_for en ActiveRecord

class Profile < ActiveRecord::Base 
    belongs_to :user  
    delegate :full_name, :to => :user 

    accepts_nested_attributes_for :user 
    ....... 

Este trabajo fino como quiero perfil para ser capaz de establecer el first_name y last_name de usuario. Pero esto plantea una amenaza a la seguridad si el usuario inyecta otros parámetros en el formulario.

¿Cómo hacer accept_nested_attributes_for takes first_name y last_name y soltar otros parámetros?

Respuesta

0

Hay dos opciones que se me ocurren y que son de hecho de la misma manera que manejaría la asignación masiva sin pasar por anaf.

  1. accepts_nested_attributes_for respetará attrs_accessible en el modelo de usuario. Si especifica que un atributo no está expuesto a la asignación masiva en el modelo de usuario, no podrá asignarse mediante accept_nested_attributes_for either.

  2. Puede manejar el saneamiento en su controlador de perfiles. Los atributos que se pasarán al modelo de usuario vendrán en params [: profile] [: user_attributes]. A continuación, puede usar slice para obtener solo los atributos que desea permitir o utilizar except para eliminar los atributos que no desea permitir. Aunque prefiero incluir en la lista blanca los atributos permitidos frente a la lista negra.

Opción 1 afectaría en cualquier lugar que está utilizando la asignación de masas para el modelo de usuario, mientras que la opción 2 sólo afectaría a los parámetros que entran a través del controlador de perfiles

Cuestiones relacionadas