2014-04-03 144 views
0

我在我的應用程序 - PaypalOrder中創建了一個新模型。現在在這個模型的其中一種方法中,我希望能夠訪問current_order對象。訂單是現有模型。我怎樣才能在軌道上做紅寶石?RoR:如何訪問另一個模型中的模型對象

我讀到關於關聯,但他們似乎有點複雜。

編輯: 使用關聯的問題是不是每個訂單都會有相應的PaypalOrder。但是每當有一個PaypalOrder我想訪問訂單。我怎樣才能建立這種關聯

+1

你想要做什麼?看起來你有一個設計問題,目前還不清楚爲什麼你需要訪問PaypalOrder內的current_order,還有,爲了節省大量的時間,如果你認爲關聯很複雜,那麼你可能會以錯誤的方式使用它們,寫一些你想做的例子 – arieljuod

+0

@arieljuod我想要在方法中獲取current_order對象的值,並將它們傳遞給一個API調用的腳本 – nish

+0

@arieljuod:使用關聯的問題不是每一個'訂單'將有一個相應的'PaypalOrder'。但每當有一個PaypalOrder我想要訪問'訂單' – nish

回答

1

怎麼樣:

class PaypalOrder 
    belongs_to :order 
end 

你paypal_orders表需要一個 「ORDER_ID」 列

,這就是它

然後創建與

def some_action 
    current_order = Order.find(some_id) 
    paypal_order = PaypalOrder.new(order: current_order) 
    #do what you want with paypal_order 
end 

一個PaypalOrder,如果你不具備的order_id做

bundle exec rails g遷移AddUserToPaypalOrder

和改變方法

add_column :paypal_orders, :user, :references 

add_column :paypal_orders, :user_id, :integer 
+0

我在paypal_orders中有一個order_id列。遷移文件如下所示:t.integer:order_id t.string:ip_address t.string:first_name t.string:last_name t.string:card_type t.date:card_expires_on'。但是,如何將此列值設置爲訂單表的'id'? – nish

+1

協會負責的,當你保存PaypalOrder記錄,paypal_order = PaypalOrder.new(順序:current_order)設置paypal_order.order_id = current_order.id,那麼當你保存paypal_order,ORDER_ID被保存到數據庫 – arieljuod

+0

好了,現在我理解。但是,我將如何能夠通過id找到訂單。我不知道當前訂單的ID是什麼。任何找到這個的方法? – nish

0

去的方式是使用顧慮,它的工作原理是這樣的:

型號:

# app/models/PayPayOrder.rb 
class PayPalOrder < BaseModel 
    # concerns 

    include MyMultipleNeededMethods 

    ... 

    def now_i_use_the_concern_method 
    concern_method 
    end 

    ... 
end 

關注:

# app/models/concerns/MyMultipleNeededMethods.rb 
module MyMultipleNeededMethods 
    extend ActiveSupport::Concern 

    def concern_method 
    puts "refactored like a boss" 
    end 

    ... 
end 

永遠不要嘗試用這種方法交叉引用方法。使用給定的Rails框架,其awesom ;-)

+0

好的,謝謝你的回答。我已經更新了這個問題,我如何設置所需的關聯。我在創建「PaypalOrder」模型時沒有建立關聯。我必須現在再創建一次嗎? – nish

+0

沒想到你想要與協會合作。您需要在模型中使用:belongs_to和:has_one關係,並將事務保存到數據庫。 –

0

唔... current_order和curren_user通常current_s緊張的會議。所以他們只能被控制器訪問。由於模型正在處理業務領域的邏輯,他們不應該訪問這些對象...

相關問題