Rails是多态的has_many / belongs_to

时间:2014-12-19 20:27:30

标签: ruby-on-rails polymorphism

我有以下型号:

User
- type

Account
- user_id

Aide
- user_id

Provider
- user_id

用户可以拥有['帐户',' aide''提供商'],并且它可以有多种类型但不应该有与之相关的多种类型。因此,类型' aide'的用户有很多助手,但它不应该有任何帐户或提供者。

在Rails中是否有一种既定的方法来处理这种类型的关联?它在传统定义中并不是多态的 - 父母的类型定义了孩子的类型更多。

1 个答案:

答案 0 :(得分:1)

  • 帐户属于用户
  • Aide属于User
  • 提供商属于用户
  • 用户有很多帐户
  • 用户有很多助手
  • 用户有很多提供商

然后您可以在User模型类中添加验证方法,如下所示:

class User < ActiveRecord::Base # your User model
  validate :pick_a_name

  private

  def pick_a_name
    # check presence of associations that aren't of the users's type

    associations = %w{accounts aides providers} # use a constant

    associations.each do |a|
      if (a != self.type.pluralize) && send(a).present?
        # if such associations are present, add errors here
      end
    end
  end
end

在其他课程中:

class Account # your account model
  validate :pick_a_name

  private

  def pick_a_name
    if (user.type != 'account')
      # add errors here
    end
  end
end