Обновить поля в рельсах - PullRequest
0 голосов
/ 06 июля 2018

У меня есть стол для родителей, дети и стол для сбора средств. У дочерней таблицы есть parent_id, у таблицы с данными child_id. Родитель подает заявку на финансирование различных мероприятий для своих детей. Каждый ребенок может иметь более одной заявки на финансирование. Поле amount_remaining в дочерней таблице по умолчанию составляет $ 400 для каждого дочернего элемента. В таблице финансирования есть поле сумма_запрошенная для операции финансирования. Как только поле статуса в таблице финансирования изменяется на одобренное, сумма_запрошенного вычитается из суммы_перечисления для конкретного дочернего элемента. Как это возможно. Пожалуйста, помогите мне. Я попробовал шаги ниже, но это не работает.

child.rb

after_save do
        if status_changed? && status == 'Approved'
          amount_remaining = child.amount_remaining - funding.amount_requested
          child.update_attributes(amount_remaining: amount_remaining)
        end
    end

схема для таблицы финансирования

create_table "fundings", force: :cascade do |t|
    t.string "type_of_activity"
    t.integer "amount_requested"
    t.integer "child_id"
    t.string "status"
end

схема для детского стола

create_table "children", force: :cascade do |t|
    t.string "firstname"
    t.string "lastname"
    t.integer "parent_id"
    t.integer "amount_remaining"
end

_form.html.erb (форма заявки на финансирование)

<div class = "form-group">
        <div class="control-label col-sm-2">
          <%= form.label :amount_requested, class: "required" %>
        </div>
        <div class="col-sm-8">
          <%= form.text_field :amount_requested, required: true %>
        </div>
      </div> 
      <div class = "form-group">
        <div class="control-label col-sm-2">
          <%= form.label :status %>
        </div>
      <% if current_user.superadmin? %>
        <div class="col-sm-8">
          <%= form.select :status,['Pending', 'Approved', 'Declined'], {}, id: "sample-status-select", class: "form-control" %>
        </div>
      <% else %>
        <div class="col-sm-8">
          <%= form.select :status,['Pending', 'Approved', 'Declined'], {class: "form-control"}, {:disabled => true} %>
        </div>
      </div>
      <% end %>

1 Ответ

0 голосов
/ 06 июля 2018

Как child_id присутствует в Funding модели, так,

в funding.rb

   belongs_to :child

    after_save do
      if status_changed? && status == 'Approved'
        if child.amount_remaining.to_f > funding.amount_requested.to_f
          amount_remaining = child.amount_remaining - funding.amount_requested
          child.update_column(:amount_remaining, amount_remaining)
        else
          errors.add(:insufficient_amount, "Insufficient amount!")
          raise ActiveRecord::RecordInvalid.new(self)
        end
      end
    end

Вы должны approve финансирование, только если child.amount_remaining.to_f > funding.amount_requested.to_f.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...