试图让我的头脑围绕正确的表格和关联来关联用户模型,以便用户既可以是其他用户礼物的购买者,也可以是礼物的接收者。每个用户只能是一个其他用户的买家,并且只能是一个其他用户的接收者。
看起来您只需要进行一些验证的简单迁移。
rails generate migration AddSantaRefToUsers
将迁移编辑为:
class AddSantaRefToUsers < ActiveRecord::Migration
def change
add_column :users, :santa_id, :integer
add_index :users, :santa_id
end
end
运行迁移rake db:migrate
然后更新用户模型。
class User
has_one :santa, foreign_key: 'santa_id'
belongs_to :santa, class_name: 'User'
validate :can_be_santa
validates :santa_id, uniqueness: true # this means no duplicate Santas
private
def can_be_santa
if self.santa == self
self.errors.add(user_id:, "You can't be your own Santa!")
end
end
end
然后让某人成为另一个用户的圣诞老人应该像以下一样简单:
user1.santa = user2