2014-04-03 82 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紧张的会议。所以他们只能被控制器访问。由于模型正在处理业务领域的逻辑,他们不应该访问这些对象...

相关问题