我有以下模型:User
,UserType
和UserStatus
。
我正在为Type& amp;状态是:
类型
状态
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
另外,我如何才能找到user
的类型,我可以user.type
而不是user.user_type
而不更改模型名称?当我在代码中,这个模型属于user
时,我更容易理解。所以我不想重命名它。
答案 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
我希望它有所帮助。