2011-03-01 19 views
86

Mi formulario de registro, que es un formulario para el modelo de Usuarios, toma un valor de cadena para la empresa. Sin embargo, acabo de hacer un cambio para que los usuarios pertenezcan a las empresas. Por lo tanto, necesito pasar un objeto de la Compañía al modelo de Usuarios.Cómo eliminar un campo de params [: algo]

Quiero usar el valor de cadena de la forma de obtener el objeto de la empresa:

@user.company = Company.find_by_name(params[:company]) 

Creo que los trabajos anteriores, sin embargo la forma es pasar el: empresa (que es una cadena) en el modelo cuando llamo:

@user = User.new(params[:user]) 

Por lo tanto, quiero saber (y no puedo encontrar la manera) para eliminar el: param empresa antes de pasarlo al modelo de usuario.

Respuesta

170

Puede quitar un par clave/valor de un hash utilizando Hash#delete:

params.delete :company 

Si está contenida en params [: de usuario], entonces tendrá que utilizar esto:

params[:user].delete :company 
+0

Esto es muy bueno, pero debemos hacerlo dentro del controlador? Parece que el controlador sabe demasiado sobre la vista si hacemos eso. – jn29098

+14

Estoy usando Rails 4.0, y 'model_params.delete: key_name' no funciona, ¿alguna idea de por qué? – Zorayr

+11

borrar el hash de params es una MALA IDEA. Confunde a las personas fácilmente durante la depuración, etc. Utilice un hash personalizado que pase para asignar atributos, p. use '' 'assin_params = params.dup.delete (: company)' ''. nunca borre directamente de params –

1
respond_to do |format| 
    if params[:company].present? 
    format.html {redirect_to(:controller=>:shopping, :action=>:index)} 
    else 
    format.html 
    end 

esto eliminará los parámetros de la url

71

Probablemente deberías estar usando hash.except

class MyController < ApplicationController 
    def explore_session_params 
    params[:explore_session].except(:account_id, :creator) 
    end 
end 

Cumple 2 cosas: le permite excluir más de 1 clave a la vez, y no modifica el hash original.

+6

Esto es mucho mejor que la respuesta aceptada. –

+3

esta es una respuesta increíble –

+0

Rails 4 ActionController :: Parámetros heredados Hash, por lo que excepto o extraer! funcionaría, en Rails 5, tiene [excepto] (http://edgeapi.rubyonrails.org/classes/ActionController/Parameters.html#method-i-except) y ¡extrae!métodos definidos en ActionController :: Parameters – kangkyu

1

La forma correcta de lograrlo es mediante strong_params

class UsersController < ApplicationController 
    def create 
    @user = User.new(user_params) 
    end 

    private 

    def user_params 
    params.require(:user).permit(:name, :age) 
    end 
end 

De esta manera usted tiene más control sobre lo que se debe pasar parametros para modelar

Cuestiones relacionadas