1

遺失物データベースを実装しようとしています。私は2つのモデルを持っていUserますItem. ユーザーはアイテムを紛失してアイテムを見つけることができます。また、アイテムには、それを見つけたユーザーと紛失したユーザーが存在する可能性があります。同じモデルを別の名前で参照できるようにしたい。

user.found_items, user.lost_items, item.founder, item.losser

今私はできる:

user.foundsuser.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
4

1 に答える 1

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
于 2013-10-07T17:08:49.200 に答える