我在我的应用程序中创建了一个新模型 - PaypalOrder。现在,在这个模型的方法之一中,我希望能够访问current_order
对象。其中 Order 是现有模型。如何在轨道上的红宝石中执行此操作?
我读过关于协会的文章,但它们似乎有点复杂。
编辑:使用关联的问题在于,并非每个订单都有相应的PaypalOrder。但是每当有PaypalOrder时,我都想访问Order。如何设置此关联
呢:
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
bundle exec rails g migration AddUserToPaypalOrder
和更改方法
add_column :paypal_orders, :user, :references
或
add_column :paypal_orders, :user_id, :integer
要走的方法是使用关注点,它的工作原理是这样的:
型:
# 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框架,它的敬畏;-)
嗯... current_order和curren_user,通常current_s都紧紧地进行会话。因此,它们只能由控制器访问。由于模型正在处理业务域逻辑,因此它们不应该访问这些对象...