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

137
Visualizações
¿Puedo tener dos campos de entrada diferentes y una columna en la base de datos?

Quiero tener dos campos de entrada, pero solo una columna en la base de datos. La primera entrada son datos almacenados en números y la otra es datos almacenados en números divididos por 24. Puede poner datos solo en un campo. ¿Hay alguna manera posible de hacer esto?

UPD: Migración:

 def change add_column :employees, :hourly_payment , :integer end

Ver: empleados/_form.html.erb

 <%= simple_form_for @employee do |form| %> <%= form.input :name %> <%= form.input :hourly_payment %> <%= form.input :monthly_payment %> <%= form.button :submit, class: "btn btn-success" %> <% end %>
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Su modelo y las tablas de la base de datos son el interior de su aplicación y no están vinculados a la vista por nada, excepto por la facilidad con la que ActiveRecord hace que use la convención sobre la configuración para vincular los dos *.

En Rails estilo MVC, el controlador es responsable de pasar la entrada del usuario al modelo. Por lo general, solo haría esto con una asignación masiva simple:

 class UsersController < ApplicationController def create @user = User.new(user_params) # ... end private def user_params params.require(:user) .permit(:email, :salary) end end

Básicamente, esto es simplemente pasar un hash de parámetros en la lista blanca directamente al modelo tal como está y todo se pasa a los configuradores que ActiveRecord creó mágicamente para usted al leer el esquema de la base de datos.

Pero no hay nada que le impida asignar atributos manualmente:

 class UsersController < ApplicationController def create @user = User.new(user_params) do |user| user.salary = calculated_salary end # ... end private def user_params params.require(:user) .permit(:email) end def calculated_salary if params[:user][:hourly_payment].present? params[:user][:hourly_payment] elsif params[:user][:monthly_payment].present? params[:user][:monthly_payment].to_i / 168 else 0 # sorry no cookies for you end end end

O jugando con el objeto de parámetros:

 def user_params params.require(:user) .permit(:email) .merge(salary: calculated_salary) end

Después de todo, es solo un hash con esteroides. Lo único que Rails le impedirá es pasar un objeto de parámetros que no haya sido incluido en la lista blanca.

No hay tableta de piedra para lo que puedes hacer en un controlador. Lo único a tener en cuenta es que los controladores son notoriamente difíciles de probar y los controladores gordos son una receta para el desastre.

Si está haciendo algo más complicado, existen mejores soluciones, como objetos de formulario , decoradores u objetos de servicio.

over 4 years ago · Santiago Trujillo Relatório

0

Deberá crear una vista para eso. Aquí hay un ejemplo de migración:

 def up sql = %(CREATE OR REPLACE VIEW my_view_models AS SELECT m.*,m.int_field*12 as my_new_value from my_models m ) self.connection.execute(sql) end def down self.connection.execute('DROP VIEW IF EXISTS my_view_models') end

Luego, puede acceder a su valor con el método my_new_value en su modelo. Deberá cambiar el nombre de la tabla predeterminada que coincida con su modelo.

 class MyModel self.table_name = 'my_view_models' end

Y accede a través de

 MyModel.first.my_new_value
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