我正在尝试实现丢失并找到的数据库。
我有两个模型User
和Item
。用户可以丢失项目并找到项目。并且项目可以包含找到它的用户和丢失它的用户。我希望能够通过不同的名称引用相同的模型,例如
user.found_items, user.lost_items, item.founder, item.losser
现在我能够做到:
user.founds
,user.losts
和user.items
将从遗失中返回items
class User < ActiveRecord::Base
has_many :founds
has_many :items, through: :founds
has_many :losts
has_many :items, through: :losts
end
class Lost < ActiveRecord::Base
belongs_to :user
belongs_to :item
end
class Found < ActiveRecord::Base
belongs_to :user
belongs_to :item
end
class Item < ActiveRecord::Base
has_one :found
has_one :user, through: :found
has_one :lost
has_one :user, through: :lost
end
答案 0 :(得分:0)
我会做一些非常相似的事情,只是为了清晰起见重命名,并为你想要的功能添加一些方法。
class User < ActiveRecord::Base
has_many :found_items
has_many :items, through: :found_item
has_many :lost_items
has_many :items, through: :lost_item
def items_found
self.found_items.map {|i| i.item.name }
end
def items_lost
self.lost_items.map {|i| i.item.name }
end
end
class LostItem < ActiveRecord::Base
belongs_to :user
belongs_to :item
end
class FoundItem < ActiveRecord::Base
belongs_to :user
belongs_to :item
end
class Item < ActiveRecord::Base
has_one :found_item
has_one :user, through: :found_item
has_one :lost_item
has_one :user, through: :lost_item
def finder
self.found_item.user.name
end
def loser
self.lost_item.user.name
end
end