Я думаю, что вы на правильном пути, большое изменение, которое я бы сделал, заключается в том, что вместо таблицы соединений (place_things) вы должны сделать ее подходящей моделью.Я решил назвать это существованием.
Данные существуют только в одном месте, поэтому они должным образом нормализованы.Эти отношения понятны и ими будет легко управлять.Я думаю, что это эффективно.
class Place < ActiveRecord::Base
has_many :existences
has_many :things, :through => :existences
end
class Thing < ActiveRecord::Base
has_many :existences
has_many :places, :through => :existences
end
class Existence < ActiveRecord::Base
belongs_to :place
belongs_to :thing
end
class Find < ActiveRecord::Base
belongs_to :user
belongs_to :existence
end
class User < ActiveRecord::Base
has_many :finds
has_many :existences, :through => :finds
has_many :things, :through => :existences
end
Вам понадобятся рельсы 3.1, чтобы у вложенных было много сквозных, как у нас в User.
Кстати, правильная декларация ассоциации должна быть: