RoR:如何访问另一个模型中的模型对象

时间:2014-04-03 13:39:46

标签: ruby-on-rails ruby-on-rails-3

我在我的应用程序中创建了一个新模型 - PaypalOrder。现在在这个模型的一个方法中,我希望能够访问current_order对象。 Order是现有模型。我怎么能在轨道上的ruby中做到这一点?

我读到了关联,但它们看起来有点复杂。

修改: 使用关联的问题在于并非每个Order都有相应的PaypalOrder。但是每当有PaypalOrder我都想访问Order。如何设置此关联

3 个答案:

答案 0 :(得分:1)

怎么样:

class PaypalOrder
  belongs_to :order
end

您需要在paypal_orders表中使用“order_id”列

就是这样

然后使用

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

如果您没有order_id,请执行

捆绑exec rails g migration AddUserToPaypalOrder

和更改方法

add_column :paypal_orders, :user, :references

add_column :paypal_orders, :user_id, :integer

答案 1 :(得分: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框架,它的真棒; - )

答案 2 :(得分:0)

Hm ... current_order和curren_user以及通常current_s对会话来说很紧张。因此只能由控制器访问它们。由于模型正在处理业务域逻辑,因此他们不应该访问这些对象......