Rails 3 - SQL-запрос более «рельсовым способом» - PullRequest
0 голосов
/ 11 августа 2011

Я хочу знать, знаете ли вы, как написать следующий SQL-запрос более "рельсовым способом"

UPDATE  buy_order_detail
SET saldo = saldo - detail_purchase.cantidad
FROM purchase_detail
           INNER JOIN purchase ON purchase.id =
purchase_detail.purchase_id
           INNER JOIN waybill ON waybill.id =
purchase.waybill_id
           INNER JOIN buy_order ON buy_order.id =
waybill.order_id
           INNER JOIN buy_order_detail ON buy_order.id =
buy_order_detail.order_id
WHERE purchase_detail.product_id = buy_order_detail.product_id 

Я пробовал что-то подобное в "DetailPurchase модели"

def after_create
    pchs = Purchase.find(self.purchase_id)
    wbl = Waybill.find(pchs.waybill_id)
    bdr = BuyOrder.find(wbl.buy_order_id)
   BuyOrderDetail.find_by_buy_order_id(bdr.id).where(:product_id => self.product_id).update_attribute(:saldo, buy_order_detail.saldo - cantidad)
  end

Но когда я проверяю значение "saldo", оно всегда сохраняет прежнее значение

1 Ответ

2 голосов
/ 11 августа 2011

При написании вопроса с помощью Rails Way, вы бы умоляли

  1. написать Модели
  2. использовать Ассоциации между моделями дляопределить их отношения
  3. вызов Model.find () с некоторыми условиями для генерации SQL (автоматически и вне поля зрения)

Все эти шаги(и другие) описаны в документации Начало работы с Rails

В Ruby on Rails один (обычно) не генерирует SQL напрямую.Но данные из базы данных моделируются моделями.Эти модели используются Rails для получения запрошенной информации из базы данных.По сути, вы можете сказать, что каждая модель соответствует таблице в базе данных (по крайней мере, для простых ситуаций).

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