如何在3个模型之间设置此关联?

时间:2013-01-20 01:24:47

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

我有以下模型:UserUserTypeUserStatus

我正在为Type& amp;状态是:

类型

  • 买家
  • 卖方

状态

  • 买家愿意
  • 买家犹豫
  • 卖方-愿意
  • 卖方-犹豫

UserType has_and_belongs_to_many :user_statuses,反之亦然。

但是,当有人创建User记录时,如果Buyer-Willing并且同样适用于其他选项,则他们应该只能分配user.user_type = 'buyer'

所以基本上,他们选择Type = Buyer,然后他们会看到2个选项。

如何在UserStatus之间设置此关联?

我觉得它有一些:through关联,但我在我的has_one :user_status, :through => :user_type模型上尝试User,我得到了一个奇怪的错误。

思想?

修改1

另外,我如何才能找到user的类型,我可以user.type而不是user.user_type而不更改模型名称?当我在代码中,这个模型属于user时,我更容易理解。所以我不想重命名它。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,听起来你想要这样的东西:

用户

belongs_to :type, class_name: "UserType"
belongs_to :status, class_name: "UserStatus", before_add: :validate_status

def validate_status
  return false unless type
  return false unless status.types.include?(type)
  true
end

用户类型

has_many :users
has_and_belongs_to_many :user_statuses

UserStatus

has_many :users
has_and_belongs_to_many :user_types

我认为如果你想取消交易,validate_status函数可以返回false,但文档似乎只提到抛出异常。

说到文档,我认为我建议的所有内容都包括在内:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

我希望它有所帮助。