-1

次のモデルがあります: UserUserType、およびUserStatus

タイプとステータスについて記録しているデータの例は次のとおりです。

タイプ

  • 買い手
  • 売り手

状態

  • バイヤーの意向
  • バイヤーがためらう
  • 売り手希望
  • 売り手躊躇

UserType has_and_belongs_to_many :user_statuses逆もまた同様です。

ただし、誰かがレコードを作成するときは、残りのオプションにも同じことが当てはまる場合Userにのみ割り当てることができます。Buyer-Willinguser.user_type = 'buyer'

したがって、基本的には Type = を選択するとBuyer、2 つのオプションが表示されます。

Userとの間の関連付けを設定するにはどうすればよいStatusですか?

:through何らかの関連があると感じていますがhas_one :user_status, :through => :user_typeUserモデルを試してみたところ、奇妙なエラーが発生しました。

考え?

編集 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 に答える