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.
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
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.
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
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
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