Cómo eliminar un campo de params [: algo]


Mi formulario de registro, que es un formulario para el modelo Users, toma un valor de cadena para company. Sin embargo, acabo de hacer un cambio para que los usuarios pertenezcan a empresas. Por lo tanto, necesito pasar un objeto de Empresa al modelo de Usuarios.

Quiero usar el valor de cadena del formulario para obtener el objeto an de Company:

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

Creo que lo anterior funciona, sin embargo la forma es pasar la: company (que es string) al modelo cuando llamo a:

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

Por lo tanto, yo desea saber (y no puede encontrar cómo) eliminar el parámetro: company antes de pasarlo al modelo User.

Author: providence, 2011-03-01

4 answers

Puede eliminar un par clave / valor de un Hash usando Hash#delete:

params.delete :company

Si está contenido en params[:user], entonces usarías esto:

params[:user].delete :company
 182
Author: Jeremy Ruten,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-01 05:05:20

Probablemente deberías usar hash.excepto

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

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

 82
Author: samuraisam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-21 18:06:50
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

 1
Author: Taimoor Changaiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-18 18:13:56

La forma correcta de lograr esto es usando 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 tiene más control sobre qué parámetros deben pasarse al modelo

 1
Author: Deepak Mahakale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-20 14:52:05