-1

我有以下模型:UserUserTypeUserStatus

我为类型和状态记录的数据示例如下:

类型

  • 买方
  • 卖方

地位

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

UserType has_and_belongs_to_many :user_statuses反之亦然。

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

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

如何设置 和 之间User的这种关联Status

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

想法?

编辑 1

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

4

1 回答 1

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

用户状态

has_many :users
has_and_belongs_to_many :user_types

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

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

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

我希望它有所帮助。

于 2013-01-20T05:36:52.977 回答