Сохраните вход формы с результатом двух других входов формы той же формы в Rails - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть форма (простые формы) с описанием, количеством и унитарной стоимостью.

Я использую JS, чтобы отобразить каждую итоговую сумму строки и итоги, только для того, чтобы пользователь мог увидеть итоги.

Моя проблема в том, что я хочу сохранить итоги формы во входных данных, которые у меня есть в той же форме, возможно, это не лучший способ сделать это, но мне нужно сделать это таким образом.

Ввод "total" сохраняется с номером результата других входов (q1 * v1) + (q2 * v2), мне не нужно отображать его в реальном времени, просто чтобы сохранить его при создании формы

<%= f.input :v1%> <!-- value of item 1 -->
<%= f.input :q1%> <!-- quantity of item 1 -->

<%= f.input :v2%> <!-- value of item 2 -->
<%= f.input :q2%> <!-- quantity of item 2 -->     

<%= f.input :total %> <!-- here i need to automaticle save the
 value of (v1*q1)+(v2*q2) when I hit the submit(create) button-->

      

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Это то, что вы бы делали либо на входе с JavaScript, либо на стороне с Rails

(я предполагаю, что вы хотите сделать это на стороне, так как Вы говорите, что имеет значение только то, что он правильно сохраняет .)

Для этого вы захотите поместить этот лог c в модель ActiveRecord в before_save обратном вызове ( logi c, как правило, не должен go вставляться в ваш контроллер).

# app/controllers/my_models_controller.rb
class MyModelsController < ApplicationController
  def update
    @model = MyModel.new(my_model_params)
    if @model.save
      # It worked
    else
      # It failed
    end
  end

  private

  def set_model
    #...
  end

  def my_model_params
    params.permit(:v1,v2,q1,q2)
  end
end

# app/models/my_model.rb
class MyModel
  attr_accessor :v1
  attr_accessor :v2
  attr_accessor :q1
  attr_accessor :q2

  before_save :calculate_total

  private

  def calculate_total
    @total = (v1*q1)+(v2*q2)
  end
end

Это просто псевдокод, но я надеюсь, что он даст вам хорошее представление о том, как выполнить это , Проверьте это (это потребует некоторых настроек) - это должно сработать.

Надеюсь, это поможет:)

0 голосов
/ 03 апреля 2020

@ Патрик Спасибо, что дали мне правильный подход, но я не смог заставить его работать, просто сохранил пустые поля, даже оригинальный q1 v1, в конце концов этот код работает для меня

before_save do
    self.total = (self.q1 * self.v1) * (self.q2 * self.v2)
  end
...