2011-08-10 42 views
0

我想知道,如果你知道如何寫下面的SQL查詢的 多個SQL查詢「軌道」Rails 3中 - 更「軌道」

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」,它總是保持相同的原始值

回答

2

編寫使用Rails的方式問題,將懇請你

  1. Models
  2. 車型之間使用AssociationsModel.find()一些條件來定義他們的關係
  3. 呼叫自動進出生成的SQL( -of視線)

所有這些步驟(和更多)在Getting Started with Rails documentation

解釋

使用Ruby on Rails時,一個(通常)不會直接生成SQL。但是來自數據庫的數據是由(duh)模型建模的。 Rails使用這些模型從數據庫中檢索請求的信息。基本上,你可以說每個模型都與數據庫中的表格相對應(至少在簡單的情況下)。

+0

不好意思,但你有沒有例子?我試着用Model.update_attribute()回調來解決這個問題,我用Model.where()試過了,我用Model.find()試過了......不幸的是似乎沒有任何工作 – Angelo

+0

@Angelo ,不是說你知道鐵路方式,我認爲最好發表一個新問題。在這個問題中顯示你已經擁有的東西,並告訴哪些部分工作不正常。 – Veger

+0

好的,我發佈了一個[新問題](http://stackoverflow.com/questions/7032067/ruby-on-rails-3-join-many-models-to-update-a-field-of-one -model-using-attribute)嘗試以更好的方式解釋我的問題 – Angelo