Thing
中有Place
个,我正在寻找。一个Thing
可以在许多不同的Place
中,并且许多Thing
可以在一个Place
中。
class Thing < ActiveRecord::Base
has_and_belongs_to_many :places
end
class Place < ActiveRecord::Base
has_and_belongs_to_many :things
end
我想记录Find
的{{1}} s,以便我知道他们在哪里找到了什么。
User
这看起来是对的吗?它有效吗?感谢。
答案 0 :(得分:5)
我认为你走在正确的轨道上,我所做的重大改变是,不应该有一个连接表(places_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
你需要rails 3.1来做嵌套有很多像我们在用户那样做。
BTW正确的关联声明应该是:belongs_to:places_things