Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

473
Visualizações
¿Rails attr_accessor definió atributos fuera del hash de parámetros fuertes en el controlador?

Considere el siguiente modelo User

esquema:

 create_table "users", id: :serial, force: :cascade do |t| t.string "fname" t.string "lname" end

Modelo:

 class User < ApplicationRecord attr_accessor :email # no column in database end

Controlador:

 def user_params params.require(:user).permit(:fname, :lname, :email) end

Estoy escribiendo una API a la que estoy enviando una solicitud POST al punto final de los users con las siguientes claves/valores:

 { "fname": "John", "lname": "Doe", "email": "email@email.com", }

Esperaría que params[:user] incluyera la clave :email ya que aunque no es una columna de la base de datos, se define como un atributo a través de attr_accessor en el modelo.

Sin embargo, la clave :email no está anidada dentro de params[:user] , y se debe acceder a ella en el nivel de params[:email] .

 # POST /users { "fname": "John", "lname": "Doe", "email": "email@email.com" } Processing by UsersController#create as JSON Parameters: {"user"=>{"fname"=>John, "lname"=>"Doe"}, "email"=>"email@email.com"}

Creo que ActionController#params_wrapper tiene algo que ver con esto, pero no entiendo el código lo suficiente como para que envuelva los atributos definidos por attr_accessor dentro del hash del user .

Necesito la :email anidada dentro de params[:user] . ¿Hay alguna forma de evitar esto?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Creo que ActionController#params_wrapper tiene algo que ver con esto

Buena corazonada. Sin embargo, fuiste demasiado rápido para saltar al código. Debería haber leído los documentos primero :)

https://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html

También puede especificar la clave en la que se deben envolver los parámetros, y también la lista de atributos que debe envolver usando opciones :include o :exclude como esta:

 class UsersController < ApplicationController wrap_parameters :person, include: [:username, :password] end

En los modelos de Active Record sin la opción :include o :exclude configurada, solo envolverá los parámetros devueltos por el método de clase attribute_names .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda