Rails 3多态关联问题

时间:2011-06-03 20:50:45

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

我一直在尝试将Orders模型切换为与我的ProductService模型的多态关联。但是,我有一些问题,即使在观看RailsCast并阅读文档之后,我也无法找到答案(所以,这些建议值得赞赏,但我需要更具体的答案)。

问题:

  1. 在这种情况下,多态关联是最好用的吗?在此之前,我使用的Transaction模型具有多个belongs_to关联,并使用自定义父函数来确定它是哪一个。这工作正常,但有人建议多态关联可以清理。
  2. 我正确设置了多态关联,并且无法自动填充transactable_idtransactable_type。代码如下。我已经通过手动将它们放入表单中来支持这一点,但如果有人知道正确的方法,那就太棒了!
  3. 如何访问具有多态关联的元素?例如,在我的购物车对象(has_many交易以及Transactions belongs_to)中,我无法再使用@cart.transactions.each do |t| ... @t.product.name类型编码访问内容。
  4. 我的模型关联看起来像这样:

    class Order < ActiveRecord::Base
      belongs_to :orderable, :polymorphic => true
    end
    
    class Product < ActiveRecord::Base
      has_many :orders, :as => :orderable
    end
    

    我的表单看起来像这样:

    <% form_for [@orderable, @order] do |f| %>
      ...
    <% end %>
    

    在我的Product显示视图中显示如下:

    <%= render 'orders/form' %>
    

    现在,我在render部分中传递product.id的变量,并使用它来填充transactable_id字段。但是,我觉得这很麻烦。

    同样,我已经阅读了教程和API文档并且无法解决这个问题,所以任何帮助都将非常感谢!

1 个答案:

答案 0 :(得分:0)

您的问题的答案:

  1. 如果您的商家登录意味着多个模型将具有相同字段的相关模型,那么您应该使用多态关联。 (在你的情况下,你可以使用它)。
  2. 如果设置了多态关联,Rails将根据关联的父模型自动处理设置*_id*_type字段。
  3. 假设您的产品包含许多多态关联订单,并且您想要定义哪个模型订单属于:

    order = Order.first
    order.orderable